#!/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):
A
Cmnd_List
是一个或多个命令名、目录和其他别名的列表。Acommandname
是完全限定的filename
,可能包含 shell 样式的通配符(请参阅下面的通配符部分)。
sudo xargs
有效,因为xargs
(几乎肯定)在可信路径中找到(/usr/bin
)。
另外,检查一下pgrep
和pkill
,它将为您节省不必要的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"
。