sudo nohupとリダイレクト

sudo nohupとリダイレクト

sudoersファイルの正しいCmnd_Aliasを見つけてください。

パスワードなしで実行できるコマンドは次のとおりです。

sudo /usr/bin/nohup /etc/init.d/axtty start >/dev/null 2>&1

sudoersファイルに追加した行は次のとおりです。

## Cmnd alias specification
Cmnd_Alias AXTOOLTTYSTART = /usr/bin/nohup /etc/init.d/axtty start >/dev/null 2>&1
Cmnd_Alias AXTOOLTTYSTOP = /etc/init.d/axtty stop
Cmnd_Alias AXTOOLTTYSTATUS = /etc/init.d/axtty status
Cmnd_Alias AXTOOLINTCTLSTART = /sbin/initctl start ttyp?
Cmnd_Alias AXTOOLINTCTLSTOP = /sbin/initctl stop ttyp?

## This will disable password request for the axtools commands
%sudoaxtools ALL=(root) NOPASSWD: AXTOOLTTYSTART, AXTOOLTTYSTOP, AXTOOLTTYSTATUS, AXTOOLINTCTLSTART, AXTOOLINTCTLSTOP
Defaults!AXTOOLTTYSTART !requiretty
Defaults!AXTOOLTTYSTOP !requiretty

上記のコマンドは、sudoaxtoolsグループのメンバーまたはルートのcrontabによって実行されるスクリプト(axopen)内で実行されます。

/usr/local/bin/axopen

#!/bin/sh

SUDO=''
if (( $EUID != 0 )); then
    SUDO='sudo'
fi

echo -n "Checking for open connections"
while netstat -d | grep -q axel
do
  ((c++)) && ((c==900)) && break
  echo -n "."
  sleep 4
done
echo "done"

echo "Starting axtty service.."
$SUDO /usr/bin/nohup /etc/init.d/axtty start >/dev/null 2>&1
sleep 4
$SUDO /etc/init.d/axtty status

sudoaxtools メンバーを介して axopen を実行すると、まだパスワードの入力を求められます。私はこれが断片化のためであると予想しました>/dev/null 2>&1

中学校

nohupを使用する理由は、単にnohupを使用すると、何らかの理由でサービスが開始されないためです。

sudo /etc/init.d/axtty start

したがって、誰もがこの問題を解決するアイデアを持っている場合は良いでしょう。

答え1

sudoルールの一部にリダイレクトしたくありません。 /etc/sudoersには実行されたプログラムが含まれており、リダイレクトはsudoコマンドとは別に発生します(含まれているシェルレベルで)。

(シェル) sudo /usr/bin/nohup /etc/init.d/axtty start >/dev/null 2>&1

これはsudoを呼び出し、sudoが表示する出力をリダイレクトします。

(sudo) /usr/bin/nohup /etc/init.d/axtty 起動

このsudoers行を変更してください。

Cmnd_Alias AXTOOLTTYSTART = /usr/bin/nohup /etc/init.d/axtty start >/dev/null 2>&1

到着する:

Cmnd_Alias AXTOOLTTYSTART = /usr/bin/nohup /etc/init.d/axtty start

答え2

結局、nohupスクリプトを別のbashスクリプトに入れました。

/usr/local/bin/axttystart

#!/bin/sh

## Intermediate bashscript in order to sudo nohup properly
/usr/bin/nohup /etc/init.d/axtty start >/dev/null 2>&1

Cmnd_alias次に、forを含むsudo'ers行を次に変更しますAXTOOLTTYSTART

Cmnd_Alias AXTOOLTTYSTART = /usr/local/bin/axttystart

更新されたaxopenスクリプトは、nohup行であるsudoスクリプトaxttystartの直接sudo実行を置き換えます。

#!/bin/sh

[...]

echo "Starting axtty service.."
$SUDO /usr/local/bin/axttystart
sleep 4
$SUDO /etc/init.d/axtty status

関連情報