项目上线之后,服务器有时候会莫名其妙的挂掉,利用shell写一个看门狗程序,监测服务器异常关闭后,重启服务器。
新建脚本文件,赋予权限
touch start.sh
chmod 755 start.sh
编写脚本文件
#!/bin/sh
# 自动监控jar并且在异常时执行重启操作
# 定义java环境变量
export JAVA_HOME=/usr/local/myApp/jdk1.8
# 获取端口号为8711的jar进程ID
# grep -v grep 排除grep命令自带的进程id
# awk '{print $2}' 只保留结果中第二列的值
pid=$(ps -ef |grep 8711|grep -v grep|awk '{print $2}')
# 启动脚本
start=/usr/local/myApp/xxx/bin/start.sh
# 服务链接地址
url=http://192.168.6.179:8711/api/swagger-ui.html
# 监控时的日志输出
log=/tmp/my.log
#linux垃圾回收站
hole=/dev/null
function doIt()
{
if [ $pid ]
then
echo "jar进程ID存在"
code=$(curl -s -o $hole -m 10 --connect-timeout 10 $url -w %{http_code}"\n") #测试链接是否可以正常访问
if [ $code -eq 200 ]
then
echo "测试链接正常"
else
echo "测试链接失败,重启jar"
kill -9 $pid # 杀掉进程
sleep 5
$start
fi
else
echo "jar进程id不存在,重启中...."
$start
fi
echo "------------------------------"
}
doIt>>$log #执行函数,并打印日志
设置定时执行start.sh文件
crontab -e
命令行输入crontab -e会自动打开一个空文件, 输入定时处理的任务:
#需要定时重启docker容器
#查看容器id: docker ps|grep netty
#yw-netty
0 2 * * * docker restart 234234234
#saas-yw-netty
0 2 * * * docker restart 4645645656
保存后,在/var/spool/cron/下面查看创建的定时任务。
添加内容:
*/30 * * * * /tmp/mySh/start.sh #每30分钟执行一次
启动定时任务
service crond start #启动定时任务
service crond status #查看状态
service crond restart #重启定时任务
service crond stop #停止定时任务
查看定时任务执行情况
crontab -l