日期:2014-05-16  浏览次数:20967 次

求助,关于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 


定时执行的过程中会运行ApacheDetector.sh脚本(脚本放在root下),并有日志写到root路径下的myweb.log中,但当tomcat挂掉时,输出的内容显示“Restart Failed!”,也没有启动tomcat,估计是没有运行tomcat中bin下面的startup.sh,单独执行脚本可以启动tomcat(直接./ApacheDetector.sh)

网上查说是环境变量的问题,如果是,应该怎么写?加到代码的什么位置?初学linux,请各位大神帮忙分析下,谢谢~~~
------解决方案--------------------
自己解决了,自己结贴!
------解决方案--------------------
怎么解决的啊