Shell脚本通过Crontab - 启动Jetty,手动工作正常,但不能通过crontab

时间:2014-06-13 03:38:08

标签: linux shell ubuntu cron

我有以下脚本:

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

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

如果执行:

,它可以正常工作
./script.sh.

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

  

启动Jetty:STARTED Jetty Fri Jun ...

我不明白为什么会这样。

2 个答案:

答案 0 :(得分:4)

尝试在crontab文件中设置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了解详情。

答案 1 :(得分:0)

你的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代码&如果可能,设置库或所需工具的显式路径。