为了确保 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
现在,如果我手动关闭服务器,那么我每分钟都会收到一封电子邮件,但由于某种原因,脚本不会启动 Tomcat。但是,如果我手动执行check.sh
,我会收到一封电子邮件,Tomcat 会再次开始运行。
关于为什么将脚本添加到 crontab 不会启动 Tomcat,您有什么想法吗?
答案1
最可能的答案是环境变量,也就是说,交互式 shell 有很多(包括相当完整的 $PATH),而对于从 cron 运行的程序,它们通常受到严重限制(包括缩写路径)。
答案2
@Craig Miskell:感谢您为我指明了正确的方向。以下是我解决问题的方法:
首先,我添加了以下几行代码/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
我根本就没碰过里面的条目。
再次感谢,希望这会有所帮助!