【发布时间】:2014-06-12 15:53:00
【问题描述】:
我在 crontab 上设置了这个脚本,每 15 分钟运行一次。它用相应的消息正确地向我发送邮件,但是当服务器崩溃时,重新启动命令(/usr/share/tomcat5.5/bin/startup.sh)不会重新启动 Tomcat,但是如果我手动运行此脚本,它重启!
*/15 * * * * /root/is_site_alive
#!/bin/bash
s=$(curl -o /dev/null --silent --head --write-out '%{http_code}\n' 'http://www.nononono.com')
if [ $s == "200" ]; then
echo 'java is UP' | mail -s "java is UP" mail@mail.com
else
/usr/share/tomcat5.5/bin/startup.sh
echo 'java is down - Restarting' | mail -s "Restarting" mail@mail.com
fi
编辑
当我从 crontab 记录运行的输出时,它会显示:
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program
但是当我手动运行脚本时:
Using CATALINA_BASE: /usr/share/tomcat5.5
Using CATALINA_HOME: /usr/share/tomcat5.5
Using CATALINA_TMPDIR: /usr/share/tomcat5.5/temp
Using JRE_HOME: /usr/lib/jvm/java-6-sun/jre
似乎运行 crontab 的用户不了解 Java 路径。为什么会这样?
【问题讨论】:
-
查看stackoverflow.com/tags/crontab/info中的典型调试问题
-
重启你的服务器并把 2>/dev/yourlogfile.txt 放在命令之后 ../../.startup.sh .. 在同一行,看看日志里有什么,也看看 catalina .out 文件看看为什么。
-
@ArunSangal,你说这个?
/usr/share/tomcat5.5/bin/startup.sh 2>/dev/yourlogfile.txt -
是的,另见“tail -f /usr/share/tomcat5.5/logs/catalina.log”
-
@ArunSangal,我按照你的建议做了,并对我的帖子进行了编辑。谢谢,如果你能帮助我更多