[英]My crond job doesn't work as expected, why?
我创建了一个Shell脚本来检查tomcat实例的状态。 如果实例尚未启动,请启动它:
if [ `ps -ef | grep 'travelco' | grep -v grep | wc -l` -eq 0 ];then
sudo /home/q/tools/bin/restart_tomcat.sh /home/www/travelco/
else
echo 'travelco started'
fi
然后,我对该脚本进行了测试,效果很好。 但是,当我将其添加为基本作业后,此脚本无法按预期工作。 我使用了crontab -e
,并添加了
*/1 * * * * /home/yuliang.jin/travelcoCheck.sh
之后,即使我可以在crontab日志中看到执行的脚本( sudo tail -f /var/log/cron
),tomcat实例也没有启动。 为什么?
您的脚本中有一个sudo
,但是您确定当前用户有权执行/home/q/tools/bin/restart_tomcat.sh
而不进行密码身份验证吗?
您应该将脚本添加到/etc/sudoers
以允许当前用户无需密码即可执行脚本,或者您可以sudo crontab -e
以root身份运行脚本(如果您使用脚本,请不要忘记删除sudo
这样做)。
如果还有其他选择,请不要在cron作业中使用sudo。
travelcoCheck.sh
将与grep travelco
匹配,并且不会被grep -v grep
取消,因此wc -l
始终至少为1。 因此restart_tomcat.sh
将不会运行。
(作为附带说明:您的ps
解析堆栈是否被ps
捕获是一种黑暗的艺术,充满了极端情况和竞赛条件,通常很难正常工作。像这样的东西就是dbus
发明的原因。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.