スクリプトで彼の名前でプロセスを終了しようとしています。
プロセス:
toto 15408 1 0 Nov13 ? 00:20:36 java -Xmx512m -XX:MaxPermSize=128m -cp /local/toto//conf/:/local/toto//lib/* com.toto.main.entry.Launchtoto processToto
私のスクリプトでは:
/usr/bin/sudo -u toto /usr/bin/pkill -9 -f $pname
sudoersから:
script_user server1=(toto) NOPASSWD: /usr/bin/pkill -9 -f java *
これはうまくいきません。 sudoエラー(sudo: no tty present and no askpass program specified
)またはpkillエラー()があります/usr/bin/pkill: invalid option -- 'X'
。
pname
含む:
java -Xmx512m -XX:MaxPermSize=128m -cp /local/toto//conf/:/local/toto//lib/* com.toto.main.entry.Launchtoto processToto
ベストアンサー1
二重引用符の外で変数置換を使用しました。これをしないでください。引用符がないため、値は$pname
空白文字に分割されるため、パラメータ、、、、、、、、、、、pkill
を-9
取得します。理解できないオプションに達すると、自然に文句を言うでしょう。-f
java
-Xmx512m
-XX:MaxPermSize=128m
-cp
/local/toto//conf/:/local/toto//lib/*
com.toto.main.entry.Launchtoto
processToto
pkill
-X
pname
パラメータに値を渡すだけですpkill
。つまり、
/usr/bin/sudo -u toto /usr/bin/pkill -9 -f "$pname"
sudoパスワードプロンプトの場合、私の修正ビーズはその項目を同じユーザー以外のNOPASSWD
項目の前に置いたことを知らせます。NOPASSWD
このNOPASSWD
項目は最後の項目でなければなりません。バラよりパスワードを要求せずにルートで特定のプログラムをどのように実行できますか?