通过 cronjob 启动 Tomcat

通过 cronjob 启动 Tomcat

为了确保 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我根本就没碰过里面的条目。

再次感谢,希望这会有所帮助!

相关内容