最近入了VPS,由于内存过小,tomcat进程经常被KILL掉,在百度之后发现可以写一个脚本来监控tomcat状态,当tomcat挂掉时,自动启动tomcat,并启用定时任务来执行它。
下面是shell脚本
#!/bin/sh # function:自动监控tomcat进程,挂了就执行重启操作 # 获取tomcat PPID TomcatID=$(ps -ef | grep tomcat | grep -v 'grep' | awk '{print $2}') # tomcat_startup StartTomcat=/data/tomcat/apache-tomcat-7.0.64/bin/startup.sh #TomcatCache=/usr/local/tomcat/tomcat7/work # 定义要监控的页面地址 WebUrl=http://127.0.0.1/oa/ # 日志输出 GetPageInfo=/data/tomcat/apache-tomcat-7.0.64/monitorlog.Info TomcatMonitorLog=/data/tomcat/apache-tomcat-7.0.64/monitorlog/TomcatMonitor.log Monitor() { echo "[info]开始监控tomcat...[$(date +'%F %H:%M:%S')]" if [ "$TomcatID" ];then echo "[info]tomcat进程ID为:$TomcatID." # 获取返回状态码 TomcatServiceCode=$(curl -s -o $GetPageInfo --connect-timeout 10 -m 20 $WebUrl -w %{http_code}) if [ $TomcatServiceCode -eq 200 ];then echo "[info]返回码为$TomcatServiceCode,tomcat启动成功,页面正常." else echo "[error]访问出错,状态码为$TomcatServiceCode,错误日志已输出到$GetPageInfo" echo "[error]开始重启tomcat" kill -9 $TomcatID # 杀掉原tomcat进程 sleep 3 #rm -rf $TomcatCache # 清理tomcat缓存 $StartTomcat fi else echo "[error]进程不存在!tomcat自动重启..." echo "[info]$StartTomcat,请稍候......" #rm -rf $TomcatCache $StartTomcat fi echo "------------------------------" } Monitor>>$TomcatMonitorLog
ps -ef | grep tomcat | grep -v 'grep' | awk '{print $2}'
访问页面返回状态码的命令
curl -s -o /dev/null --connect-timeout 10 -m 20 http://lazyrabbit.tech -w %{http_code}
接下来设定定时任务
添加定时任务,每五分钟执行一次
crontab -e */5 * * * * /usr/local/tomcat/monitor.sh
同时按下ctrl+c退出编辑模式,按下shift+: 输入wq 退出 crontab
查看定时任务
crontab -l
可能出现的问题
如果报/bin/bash^M:,坏的解释器
/bin/bash^M:bad interpreter: No such file or directory
这时因为编码的问题,需要进行编码转换。使用sudo vim xxx打开文件,:set ff可以看到当前的格式,应该是dos,使用set ff=unix,更改其格式,然后保存退出,就能正常的运行程序了
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program
tomcat启动没有找到jdk环境,需要在tomcat/bin路径下的setclasspath.sh文件中配置jdk路径
export JAVA_HOME=/usr/local/java/jdk8export JRE_HOME=/usr/local/java/jdk8/jre
/usr/local/tomcat/monitor.sh: Permission denied
这个脚本没有权限,需要设置权限
chmod 777 monitor.sh
本文由 admin 创作,采用 知识共享署名4.0
国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为:2022-08-09 22:46:12