为了确保Tomcat一直在运行,我写了下面的shell脚本
#!/bin/bash status="$(curl -s http://www.domain.com/check)" if [ "$status" != "OK" ] then /opt/apache-tomcat-8.0.15/bin/startup.sh /usr/sbin/sendmail [email protected] < email.txt fi
并通过添加到crontab
*/1 * * * * /opt/scripts/check.sh
现在,如果我手动closures服务器,那么我每分钟都会收到一封电子邮件,但由于某种原因,脚本不会启动Tomcat。 但是,如果我手动执行check.sh ,我收到一封电子邮件,Tomcat又开始运行。
关于为什么将脚本添加到crontab的任何想法都不启动Tomcat?
最可能的答案是环境variables,即一个交互式shell有很多(包括一个相当完整的$ PATH),而对于从cron运行的程序,它们通常是非常有限的(包括一个缩写path)。
@克莱格·米斯凯尔:谢谢你指点我正确的方向。 这就是我解决问题的方法:
首先,我将以下代码行添加到/etc/crontab :
SHELL=/bin/bash PATH=/opt/jdk1.8.0_25/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin MAILTO=root HOME=/root JAVA_HOME=/opt/jdk1.8.0_25
其次,我更新了shell脚本:
#!/bin/bash export JAVA_HOME=/opt/jdk1.8.0_25 export PATH=$PATH:/opt/jdk1.8.0_25/bin status="$(curl -s http://www.domain.com/check)" if [ "$status" != "OK" ] then /opt/apache-tomcat-8.0.15/bin/startup.sh /usr/sbin/sendmail [email protected] < email.txt fi
crontab -e的条目我根本没有碰到。
再次感谢,我希望这有助于!