![在 cron 中运行包含 sudo 的脚本](https://linux22.com/image/1351304/%E5%9C%A8%20cron%20%E4%B8%AD%E8%BF%90%E8%A1%8C%E5%8C%85%E5%90%AB%20sudo%20%E7%9A%84%E8%84%9A%E6%9C%AC.png)
#!/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 中不必要的打印语句只会使日志变得混乱。如有必要,您可以在脚本中实现日志记录机制。