求助,关于linux中使用cron服务检测tomcat进程,当进程死掉时自动启动tomcat,手动执行脚本可以,在crontab中调用就不执行脚本,大神帮忙啊!
在网上看见一位大神发的一个shell脚本,是当tomcat进程挂掉时自动启动tomcat的,根据本人的需要,做了一下修改,在linux中直接运行脚本可以实现,但是当在cron服务中定时检测时,就不会运行shell脚本中启动tomcat的脚本startup.sh,在网上寻找了很久解决方法,看的最多的是环境的原因,但是还是没能解决问题,请各位大神帮忙分析下吧
说明:使用root登陆linux,在命令行中使用命令crontab -u root -e编辑定时任务,代码如下
*/10 * * * * /root/ApacheDetector.sh
使用crontab -u root -l 可以看见已经添加到任务列表
shell脚本的内容如下:
#!/bin/sh
#echo $(date) >>/root/myweb.log
#./etc/profile
#.~/.bash_profile
export PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/java/jdk1.6.0_20/bin
date +%Z--%A--%x--%T >>/root/myweb.log
echo "Start Detector Tomcat Progress!" >>/root/myweb.log
URL="http://127.0.0.1:7000/myweb/"
curlit()
{
curl --connect-timeout 15 --max-time 20 --head --silent "$URL" | grep '200'
#上面的15是连接超时时间,若访问localhost的HTTP服务超过15s仍然没有正确响应200头代码,则判断为无法访问。
}
doit()
{
if ! curlit; then
echo "Tomcat was dead!" >> /root/myweb.log
echo "Restart Tomcat!" >> /root/myweb.log
# 如果localhost的apache服务没有正常返回200头,即出现异常。执行下述命令:
sleep 10
kill `ps -ef|grep java|grep -v grep |awk '{print $2}'` > /dev/null 2>&1
# 这条语句中ps -ef|grep java|grep -v grep为查询进程中java进程同时排除本身语句,用awk找到第二列信息,返回状态扔到黑洞中。
sleep 2
cd /root/apache-tomcat-6.0.24/bin/
sh startup.sh
#sh /root/apache-tomcat-6.0.24/bin/startup.sh
echo "Tomcat Restart!" >> /root/myweb.log
# 写入日志
sleep 120
# 重启完成后等待,然后再次尝试一次
echo "Detector once more!"
if ! curlit; then
# 如果仍然无法访问,则:
echo "Restart Failed!" >> /root/myweb.log
# 写入apache依然重启失效的日志
else
echo "Restart Success!" >> /root/myweb.log
fi
else
echo "Tomcat is running!" >> /root/myweb.log
fi
}
sleep 3
# 运行脚本后才开始正式工作(防止重启服务器后由于tomcat还没开始启动造成误判)
# 主循环体
doit
echo "Detector Over!" >> /root/myweb.log
echo "---------------------------------------" >> /root/myweb.log