【问题标题】:Shell Script via Crontab - Start Jetty, works fine manually, but not via crontab通过 Crontab 的 Shell 脚本 - 启动 Jetty,手动工作正常,但不能通过 crontab
【发布时间】:2017-07-06 21:48:21
【问题描述】:

我有以下脚本:

#!/bin/bash
jettyPid=`pgrep -f solr`

if [ "$jettyPid" == "" ]
then
   /etc/init.d/jetty start &
fi

如果执行它就可以正常工作:

./script.sh.

问题是,如果我把它放在一个 cron 作业中,Jetty 将不会启动,但是,它会记录到我的日志文件中:

Starting Jetty: STARTED Jetty Fri Jun…

我不明白为什么会这样。

【问题讨论】:

    标签: linux shell ubuntu cron


    【解决方案1】:

    尝试在您的 cronjob 文件中设置 PATH

    就我而言,

    echo $PATH 
    /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
    

    在您的 crontab 中添加路径:crontab -e

    PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
    
    30 5 * * * runmyscript
    

    您可以查看this question了解更多详情。

    【讨论】:

      【解决方案2】:

      你的 crontab 条目是什么样的?

      此外,此脚本的问题可能是您没有指定 bash 作为解释器:

      jettyPid=`pgrep -f solr`
      
      if [ "$jettyPid" == "" ]
      then
         /etc/init.d/jetty start &
      fi
      

      尝试将#!/bin/bash 添加为文件的第一行,如下所示:

      #!/bin/bash
      jettyPid=`pgrep -f solr`
      
      if [ "$jettyPid" == "" ]; then
         /etc/init.d/jetty start &
      fi
      

      如果您不指定bash,cron 作业将仅使用标准系统 shell。另请注意,我添加了; 并将then 移动到if 行。这种语法对于处理bash 脚本的方式更为标准。

      如果 Jetty 设置需要任何属于您自己的个人$PATH 但不属于系统范围$PATH 的任何库,那么它将会失败。 chamzzey 提供的答案是正确的,但如果任何路径发生变化,这将再次中断。从长远来看,最好查看 Jetty 代码并尽可能设置库或所需工具的显式路径。

      【讨论】:

      • 杰克,我的脚本有 bash。包括 PATH,因为 chamzzey 说工作正常。谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      • 2018-05-06
      • 2017-10-27
      • 2014-01-02
      • 2011-01-14
      • 1970-01-01
      相关资源
      最近更新 更多