我试图在脚本中以他的名字杀死一个进程。
过程 :
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 身份运行特定程序?