Linux 我的克朗工作不需要';我没能按预期工作,为什么?

Linux 我的克朗工作不需要';我没能按预期工作,为什么?,linux,shell,cron,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作业添加后,该脚本并没有按预期工作。

我创建了一个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日志(
sudotail-f/var/log/cron
)中看到执行的脚本,tomcat实例也没有启动。为什么?

您的脚本中有一个
sudo
,但是您确定当前用户有权限在没有密码验证的情况下执行
/home/q/tools/bin/restart\u tomcat.sh

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

  • 如果有其他选择,不要在cron作业中使用sudo

  • travelcoCheck.sh
    将由
    grep travelco
    匹配,并且不会被
    grep-v grep
    取消,因此
    wc-l
    将始终至少为1。因此,
    restart\u tomcat.sh
    将不会运行


  • (作为旁注:无论你的
    ps
    -解析堆栈是否被
    ps
    捕获,都是一门黑暗的艺术,充满了角隅和竞争条件,通常很难正常工作。这就是
    dbus
    被发明的原因。)

    你不需要给出/1。默认情况下,如果您使用*,cron将每分钟运行一次。所以请使用
    ***/home/yulliang.jin/travelcoCheck.sh
    谢谢,但是为什么脚本没有按预期执行呢?我的意思是这个例子已经开始了。但是当我执行“/home/yulliang.jin/travelcoCheck.sh”时,它就可以启动了。@jQuery.PHP.Magento.com你的意思是直接在Shell中点击sh文件并按enter键,它就会运行吗?你说tomcat实例没有启动。,然后启动它。是的,我将比较部分改为“如果”[
    ps-ef | grep java | grep travelco | wc-l
    -eq 0]”,这次成功了。谢谢!