shell脚本定时任务没有完全执行

如图,由于网络波动,有时候早上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

下面红框里两个打印程序报错的语句,第一次是定时任务执行它打印的,第二次是我手动调用这个任务打印的。
img

涉及到tomcat的启停,可能与是否获取到Javahome有关系,换成这样试试,重启tomcat另写一个脚本。
autocheck.sh

#获取当前时间
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/tomcatStart.sh
    #检查是否启动成功
    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

tomcatStart.sh

#!/bin/sh
#设置环境变量
JAVA_HOME=/usr/java/jdk1.7.0_15
JRE_HOME=/usr/java/jdk1.7.0_15/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH

#tomcat启动程序
startTomcat=/app/ICSR4TEST/tomcat7/bin/startup.sh
#tomcat启动脚本
TomcatID=$(ps -ef | grep tomcat | grep -w 'tomcat'|grep -v 'grep'|awk '{print $2}')
#杀掉原tomcat进程
if [[ $TomcatID -eq "" ]];
then
    $startTomcat
else
    kill -9 $TomcatID
    sleep 15s
    $startTomcat
fi

具体情况待观察,但我觉得已经是真相了。