命令没有在 shell 脚本中执行?

命令没有在 shell 脚本中执行?
#!/bin/bash
value=$(</var/www/sym_monitor/man.txt)


if [ "$value" == "true" ]; then

     ps -ef|grep sym |grep -v grep |awk '{ print $2 }'|sudo  xargs kill -9;


(cd /var/www/symmetric-ds-3.1.6/bin;sudo ./sym --port 8082 --server);

fi

括号内的第二个命令没有执行,知道为什么会发生这种情况吗?

答案1

出于安全原因,您必须使用绝对路径sudo

( sudo /var/www/symmetric-ds-3.1.6/bin/sym --port 8082 --server );

检查输出sudo -l以确认。从sudoers手册页(1.7.x):

ACmnd_List是一个或多个命令名、目录和其他别名的列表。Acommandname是完全限定的filename,可能包含 shell 样式的通配符(请参阅下面的通配符部分)。

sudo xargs有效,因为xargs(几乎肯定)在可信路径中找到(/usr/bin)。

另外,检查一下pgreppkill,它将为您节省不必要的ps管道杂技。

您可能会出现资源泄漏和其他不必要的行为kill -9,请参阅https://unix.stackexchange.com/questions/8916/why-not-kill-9-a-process

更新您已添加通过 root 的 crontab 运行此操作 - root 无需使用sudo,在某些情况下 root 可能已预防通过运行sudo,检查sudo -l您作为 root 时显示的内容。如果您希望能够以特定用户 ID 启动程序(不切换其自己的 uid),那么常用方法是su - username -c "command"

相关内容