原因
最近其他项目组在测试环境调用我们接口进行压测,导致项目经常挂,需要手动重启。手动重启很简单,但是每次需要自己来重启,确实挺麻烦的,特别是有时候下班了,项目挂了,他们还在测。
解决
于是写了个脚本,用Linux自带的crontab计划任务来每15分钟循环检测一下项目是否挂了,如果挂了,就自动重新执行一下启动脚本就行了。
准备
首先写一个脚本,监听端口是否已经挂了。(这里拿我服务器上的mysql作为例子,每分钟检测一下mysql是否挂了,其它的仿照着改一下就行了)
vi autorestart.sh
(这个脚本用来监听端口是否存在,如果不存在则进行重启)
#!/bin/bash
now=$(date "+%Y-%m-%d %H:%M:%S")#记录当前的时间
status=$(netstat -lnp|grep ":3306 "|awk '{print $6}')#获取3306端口的状态
if test -z $status #判断status是否为空
then
/usr/sbin/service mysql restart #service命令启动mysql,service的路径要写全
echo "$now:进程挂了....." >> /home/gepeisong/test/test.log #将进程状态写入日志中
else
if test "LISTEN" = $status
then
echo "$now:进程正在运行中....." >> /home/gepeisong/test/test.log
else
/usr/sbin/service mysql restart
echo "$now:进程挂了....." >> /home/gepeisong/test/test.log
fi
fi
接下来就只要把这个shell脚本加入crontab
中循环执行,输入crontab -e
,在里面加入每分钟执行一次的脚本(*/15 * * * *:每15分钟执行一次)
*/1 * * * * sh /home/gepeisong/test/autorestart.sh
输入crontab -l
查看状态。
查看日志,可以看见每分钟执行一次。