#!/bin/bash
value=$(<man.txt)
echo "$value"
if [ "$value" == "true" ]; then
echo "startedif_manthan"
ps -ef|grep sym |awk '{ print $2 }'|sudo xargs kill -9;
sleep 30;
sudo sh /var/www/symmetric-ds-3.1.6/bin/sym --port 8082 --server;
fi
我需要在 cron 中运行上述脚本。它可以在 cron 中执行而无需密码吗?
有什么建议么?
答案1
您可以配置sudo
为不需要密码:
使
/var/www/symmetric-ds-3.1.6/bin/sym
可执行文件:$ chmod a+x /var/www/symmetric-ds-3.1.6/bin/sym
在您的脚本中替换:
sudo sh /var/www/symmetric-ds-3.1.6/bin/sym --port 8082 --server
和:
sudo /var/www/symmetric-ds-3.1.6/bin/sym --port 8082 --server
使用
visudo
将以下行添加到/etc/sudoers
:<user who runs the cronjob> ALL = NOPASSWD:/path/to/xargs [-0-9 a-z]*, /var/www/symmetric-ds-3.1.6/bin/sym [-0-9 a-z]*
答案2
我宁愿将脚本布局如下:
#!/bin/sh
read value < /path/to/man.txt
if [ "$value" = "true" ]; then
pkill -u root '^sym$' && sleep 30
sh /var/www/symmetric-ds-3.1.6/bin/sym --port 8082 --server
fi
因为无论如何你都想以 root 身份运行每个命令,所以把它放在 root 的 crontab 中。如果你不需要以 root 身份运行任何东西,就不要。如果你确实需要通过为sudo
某些应用程序专门配置的权限来运行它,请恢复sudo
,但请注意,你还需要专门配置的权限来终止程序(除非它具有相当于开关的功能--kill
)。
我删除了echo
s,因为 crontab 中不必要的打印语句只会使日志变得混乱。如有必要,您可以在脚本中实现日志记录机制。