Linux 我的克朗工作不需要';我没能按预期工作,为什么?
我创建了一个shell脚本来检查tomcat实例的状态。如果实例未启动,则启动它: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作业添加后,该脚本并没有按预期工作。
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
)
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]”,这次成功了。谢谢!