背景
最近公司的网站老是会挂掉,两天挂一次,由于之前没怎么接触Linux,所以原因是找不到了。试了网上加内存的方法也没有用。就想着加个进程守护吧。写个脚本,然后用crontab定时执行,这样问题不就解决了吗。于是找了很多网上的脚本,有的太复杂看不懂,有的不适用,不知道从哪改,后来参考好几个脚本写了个通用版,给大家参考一下,本人菜鸡,请勿指点,觉得好用就拿去,不好用划走就好了。纯新手教学。
一、前期准备
1、确认有没有启动crontab服务,怎么查看linux定时任务是否启动?
2、确定自己家的tomcat的路径,我的是/usr/java/apache-tomcat-8.0.33
二、编写脚本
我是在自己电脑上编辑好脚本再上传到服务器
#!/bin/bash
. /etc/profile
# 获取tomcat进程ID
tomcatPath="/usr/java/apache-tomcat-8.0.33"
TomcatID=`ps -ef | grep tomcat | grep -w $tomcatPath | grep -v 'grep' | awk '{print $2}'`
# 定义要监控的页面地址
WebUrl=http://www.xxx.com/
Monitor()
{
echo "[info][$(date +'%F %H:%M:%S')]开始监控tomcat..."
if [[ $TomcatID ]];then # 这里判断TOMCAT进程是否存在
echo "[info][$(date +'%F %H:%M:%S')]当前tomcat进程ID为:$TomcatID,继续检测页面..."
# 检测是否启动成功(根据网站能正常访问时返回的状态码定,比如我的是302,一般是200)
TomcatServiceCode=$(curl -I -m 10 -o /dev/null -s -w %{http_code} $WebUrl)
if [ $TomcatServiceCode -eq 302 ];then
echo "[info][$(date +'%F %H:%M:%S')]页面返回码为$TomcatServiceCode,tomcat启动成功,测试页面正常......"
echo "[error][$(date +'%F %H:%M:%S')]tomcat页面正常......状态码为$TomcatServiceCode" >> /usr/local/tomcat/err.txt
else
echo "[error][$(date +'%F %H:%M:%S')]tomcat页面出错,请注意......状态码为$TomcatServiceCode"
echo "[error][$(date +'%F %H:%M:%S')]tomcat页面出错,请注意......状态码为$TomcatServiceCode" >> /usr/local/tomcat/err.txt
cd /usr/java/apache-tomcat-8.0.33/bin
./startup.sh
echo "[info][$(date +'%F %H:%M:%S')]tomcat启动成功"
fi
else
echo "[error][$(date +'%F %H:%M:%S')]tomcat进程不存在!tomcat开始自动重启..."
echo "[info][$(date +'%F %H:%M:%S')]tomcat starting,请稍候......"
cd /usr/java/apache-tomcat-8.0.33/bin
./startup.sh
echo "[info][$(date +'%F %H:%M:%S')]tomcat启动成功"
fi
echo "------------------------------"
}
Monitor代码的逻辑很简单,先监控一下进程存不存在(一般都是存在的,因为可能会有多个进程,所以一般不建议用这种方式判断tomcat有没有挂掉),存在则获取一下网页的状态码。如果状态码正常,则记录为正常,否则报错并启动tomcat。如果进程不存在,则启动tomcat。
如果不知道自己要监控的网页正常情况下的状态码,可以直接输入命令
curl -I -m 10 -o /dev/null -s -w %{http_code} http://www.xxx.com
(网址为自己想要监控的网址)。这里注意,网址正常访问的情况下用该命令获取的状态码一般都可当作正常的状态码,然后修改脚本里的语句,把302替换为获取的状态码
if [ $TomcatServiceCode -eq 302 ];then
三、设置定时任务
1、脚本写完以后,保存为tomcat.sh,放到tomcat的安装路径下(例如我的:/usr/java/apache-tomcat-8.0.33)
2、输入命令
crontab -e
进入编辑界面
编辑一个定时任务(想设置自己想要的定时任务时间,参考文章(自己随便找的): Linux设置定时任务_hjkl_uiop的博客-CSDN博客_crontab每天凌晨1点执行)
*/5 * * * * /usr/java/apache-tomcat-8.0.33/tomcat.sh >> /usr/local/tomcat/shlog.txt
*/5 * * * * 为每五分钟启动一次,这里给个链接方便设定自己想要的时间 crontab执行时间计算 - 在线工具 (tool.lu)
/usr/java/apache-tomcat-8.0.33/tomcat.sh 是脚本的路径
>> /usr/local/tomcat/shlog.txt 是将提示信息保存到/usr/local/tomcat/shlog.txt中
编辑完保存并退出就完成了
四、效果
早上上班查看了一下提示信息

shlong.txt
err.txt
发现半夜1:00到1:05,网页挂掉了,随后在1:05脚本自动重启成功,大功告成。