linux下tomcat监控自启动脚本

环境:redhat9.0

1、脚本如下:/root/cs.sh

#!/bin/bash
JAVA_HOME=/root/jdk1.5.0_01
CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
PATH=:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export JAVA_HOME CLASSPATH PATH

BEGINTIME=$(date +%M)
while true
do
if [[ -e testpage.log ]]
then
cp -f /dev/null /root/testpage.log
fi

sleep 10

ENDTIME=$(date +%M)
if ((expr $ENDTIME - $BEGINTIME) > 1 )
then
break
fi

/usr/local/bin/lynx -dump -connect_timeout=15000 -error_file=/root/testpage.log

\http://localhost:8080/index.jsp >/dev/null
cat /root/testpage.log | grep "STATUS=HTTP/1.1 200 OK" >/dev/null

if (( $? != 0 ))
then
TOMCAT=$(ps -ef --cols 200 |grep java.*tomcat |awk '{if($3==1)print $3}')
if [ "$TOMCAT" != 1 ]
then
echo -e "$(date +%Y-%m-%d-%H:%M:%S):STARTUP TOMCAT NOW!" >>

/root/tomcatlog.log
/root/tomcat-5.5.7/bin/startup.sh
continue
else
echo -e "$(date +%Y-%m-%d-%H:%M:%S):RESTART,SHUTDOWN TOMCAT NOW!" >>

/root/tomcatlog.log
/root/tomcat-5.5.7/bin/shutdown.sh
continue
fi
else
echo -e "$(date +%Y-%m-%d-%H:%M:%S):TOMCAT IS RUNNING!" >> /root/tomcatlog.log
break
fi
done

2、添加到crontab中

[root@localhost root]# crontab -e

输入:

SHELL=/bin/bash
PATH=/root/jdk1.5.0_01/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
HOME=/root
*/1 * * * * sh /root/cs.sh
表示一分钟执行下脚本

3、安装lynx

下载:lynx2.8.5.tar.gz 解压到root下

[root@localhost root]# tar -xzvf lynx2.8.5.tar.gz

[root@localhost root]# cd lynx2-8-5/ 进入lynx2-8-5目录
[root@localhost lynx2-8-5]#./configure 编译
[root@localhost lynx2-8-5]# make install 开始安装

默认安装到:/usr/local/bin/lynx

lynx参数:
-dump :显示网页内容到标准输出并推出
-connect_timeout :设置超时时间,单位(毫秒)
-error_file :将网页的返回状态信息写进文件

思路:先访问页面,如果的到200 OK状态直接跳出来,如果是500,404 等错误,在判断进程中是否有tomcat进程,如果有先停掉,然后在启tomat。

其中遇到了几个问题:

1、bash脚本在sh下运行异常,其中有

a、root下没有这个命令:

SHELL=/bin/bash
PATH=/root/jdk1.5.0_01/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
HOME=/root

*/1 * * * * root /root/cs.sh改成*/1 * * * * sh /root/cs.sh

b、找不到java_home:以下加入到脚本

JAVA_HOME=/root/jdk1.5.0_01
CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
PATH=:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export JAVA_HOME CLASSPATH PATH

以下是在另外一个linux版本下的
#!/bin/bash
BEGINTIME=$(date +%s)
while true
do
if [ -e testpage.log ]
then
cp -f /dev/null /root/testpage.log
fi
sleep 10
ENDTIME=$(date +%s)
OVERTIME=$(($ENDTIME-$BEGINTIME))
if (( $OVERTIME > 45 ))
then
echo -e "overtime exit:$OVERTIME second! " >> /root/tomcatlog.log
break
fi
/usr/local/bin/lynx -dump -connect_timeout=15000 -error_file=/root/testpage.log \http://192.168.100.126:8080/cdnweb/test.do >/dev/null
cat /root/testpage.log | grep "STATUS=HTTP/1.1 200 OK" >/dev/null
if [ "$?" != 0 ]
then
echo -e "$?:status=http/1.1 500 error! " >> /root/tomcatlog.log
TOMCAT=$(ps -ef --cols 200 |grep java.*tomcat |awk '{if($3==1)print $3}')
if [ "$TOMCAT" != 1 ]
then
echo -e "$(date +%Y-%m-%d-%H:%M:%S):STARTUP TOMCAT NOW! " >> /root/tomcatlog.log
/root/apache-tomcat-5.5.20/bin/startup.sh
continue
else
echo -e "$(date +%Y-%m-%d-%H:%M:%S):SHUTDOWN TOMCAT NOW! " >> /root/tomcatlog.log
/root/apache-tomcat-5.5.20/bin/shutdown.sh
continue
fi
else
echo -e "$?:status=http/1.1 200 ok! " >> /root/tomcatlog.log
echo -e "$(date +%Y-%m-%d-%H:%M:%S):TOMCAT IS RUNNING NOW! " >> /root/tomcatlog.log
break
fi
done

根据实际情况tomcat无法停掉在此做出修改(避免启动多个tomcat导致的一直启动问题)
#!/bin/bash
BEGINTIME=$(date +%s)
while true
do
if [ -e testpage.log ]
then
cp -f /dev/null /root/testpage.log
fi
sleep 40
ENDTIME=$(date +%s)
OVERTIME=$(($ENDTIME-$BEGINTIME))
if (( $OVERTIME > 180 ))
then
echo -e "overtime exit:$OVERTIME second! " >> /root/tomcatlog.log
break
fi
/usr/local/bin/lynx -dump -connect_timeout=50000 -error_file=/root/testpage.log \http://localhost/test.do >/dev/null
cat /root/testpage.log | grep "STATUS=HTTP/1.1 200 OK" >/dev/null
if [ "$?" != 0 ]
then
TOMCAT=$(ps -ef |grep -v grep |grep -c java.*tomcat)
if [ "$TOMCAT" = 0 ]
then
echo -e "status=http/1.1 404 error! " >> /root/tomcatlog.log
echo -e "$(date +%Y-%m-%d-%H:%M:%S):STARTUP TOMCAT NOW! " >> /root/tomcatlog.log
/root/apache-tomcat-5.5.17/bin/startup.sh
continue
else
echo -e "status=http/1.1 500 error! " >> /root/tomcatlog.log
PID=$(ps -ef |grep java.*tomcat |grep -v grep |cut -c9-15)
echo -e "$(date +%Y-%m-%d-%H:%M:%S):SHUTDOWN TOMCAT NOW! " >> /root/tomcatlog.log
kill -9 $PID
continue
fi
else
#echo -e "$?:status=http/1.1 200 ok! " >> /root/tomcatlog.log
echo -e "$(date +%Y-%m-%d-%H:%M:%S):TOMCAT IS RUNNING NOW! " >> /root/tomcatlog.log
break
fi
done

在实际测试过程中出现多个CS1.SH运行到sleep的时候一起无法响应,突然很多个CS1.SH同时被唤醒而导致出错做出如下调整,在sleep前加如下代码(目的保证一次一个CS1.SH脚本运行)

NUM=$(ps -ef |grep -v grep |grep -c cs1.sh)
if [ "$NUM" != 0 ]
then
echo -e "$(date +%Y-%m-%d-%H:%M:%S):There is a cs1.sh running! " >> /root/tomcatlog.log
break
fi

你可能感兴趣的:(java,tomcat,linux,脚本,bash)