我的cron工作没有按预期工作,为什么?

时间:2015-04-20 03:53:25

标签: linux shell cron

我创建了一个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

然后我测试了脚本并且运行良好。但是在我把它添加为crond工作之后,这个脚本并没有像预期的那样工作。 我使用了crontab -e,并添加了

*/1 * * * * /home/yuliang.jin/travelcoCheck.sh

之后,即使我可以看到在crontab日志(sudo tail -f /var/log/cron)中执行的脚本,tomcat实例也没有启动。为什么呢?

2 个答案:

答案 0 :(得分:2)

您的脚本中有sudo,但您确定当前用户是否有权在没有密码身份验证的情况下执行/home/q/tools/bin/restart_tomcat.sh

您应该将脚本添加到/etc/sudoers以允许当前用户无需密码即可执行脚本,或者您只需sudo crontab -e以root身份运行脚本(并且不要忘记如果您这样做,请删除脚本中的sudo

答案 1 :(得分:1)

  1. 如果还有其他选择,请不要参加cron工作。

  2. travelcoCheck.sh将与grep travelco匹配,grep -v grep不会取消,因此wc -l将始终至少为1。所以restart_tomcat.sh将无法运行。

  3. (作为旁注:你的ps - 解析堆栈是否被ps捕获是一种黑暗艺术,充满了极端情况和竞争条件,而且通常很难达到这就是为什么dbus被发明了。)