我有以下脚本:
#!/bin/bash
jettyPid=`pgrep -f solr`
if [ "$jettyPid" == "" ]
then
/etc/init.d/jetty start &
fi
如果执行:
,它可以正常工作./script.sh.
问题是,如果我将它放在一个cron作业上,Jetty将无法启动,但是,它会记录到我的日志文件中:
启动Jetty:STARTED Jetty Fri Jun ...
我不明白为什么会这样。
答案 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代码&如果可能,设置库或所需工具的显式路径。