pkill 在脚本中

pkill 在脚本中

我试图在脚本中以他的名字杀死一个进程。

过程 :

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条目需要放在最后。看如何在没有密码提示的情况下以 root 身份运行特定程序?

相关内容