如图,由于网络波动,有时候早上6点会出现数据库连接重置的异常,导致tomcat上的一个kbdatainterface的程序跟gg了一样,所以写了一个定时检查的脚本,每早7点检查,如果有报错就重启tomcat。
但是这个脚本我发现我手动执行就正常调用,定时任务调用它的时候,他不会执行tomcat的关闭或者启动命令,这是什么原因呢?是权限的问题吗?
#获取当前时间
current=$(date)
#检查是否有报错
if test $(cat /app/ICSR4TEST/javalog/kbdatainterface.log|tail -n 200|grep -c 'ERROR') -ne 0
then
echo "程序报错了,时间为:" $current >> /app/ICSR4TEST/aotuocheck.log
echo "程序报错了,时间为:" $current
#重启tomcat
sh /app/ICSR4TEST/tomcat7/bin/shutdown.sh
while (true)
do
#tomcat还没关闭的话就等待一下
if test $(ps -ef |grep -c 'tomcat7') -gt 1
then
echo "wait wait..."
sleep 5
#已经关闭的话就重启tomcat
else
echo "已经关闭,正在重启..." >> /app/ICSR4TEST/aotuocheck.log
sh /app/ICSR4TEST/tomcat7/bin/startup.sh
break
fi
done
#检查是否启动成功
while (true)
do
usetime=0
if test $(cat /app/ICSR4TEST/tomcat7/logs/catalina.out|tail -n 200|grep -c 'Server startup in') -eq 1
then
echo "重启成功"
break
else
sleep 220
usetime=`expr $usetime + 220`
if test $[usetime] -gt 500
then
echo "启动超时" $current
break
fi
fi
done
else
echo "现在正常" $current >> /app/ICSR4TEST//aotuocheck.log
echo "现在正常" $current
fi
下面红框里两个打印程序报错的语句,第一次是定时任务执行它打印的,第二次是我手动调用这个任务打印的。