前言
十一国庆假期将至,公司就开始安排国庆假期值班的任务了。值班的主要任务就是确保项目不会停止,确保停止后能联系到相关人员快速重启项目。
为此,突然想到,可以写一个Linux定时任务,定时检查项目是否在线,不在线则主动重启项目。
首先,写一个脚本,用于判断项目是否存在,不存在则主动重启项目;然后,将该脚本添加到Linux的定时任务中。以下为实现步骤。
编写Linux脚本
1、准备相关文件,配置相关权限
## 在临时目录中创建相关的目录和脚本
cd /tmp
mkdir timedTask
cd timedTask
## project.log 文件用于记录脚本的运行日志,project.sh 文件为任务脚本
touch project.log, project.sh
chmod 666 project.log
## 设置脚本文件的权限,方便用户运行和启动
chmod 777 project.sh
2、编写脚本
## project.sh 脚本内容如下
#!/bin/sh
## 项目路径
SERVICE_DIR=/home/dhj/project
## 服务名称
SERVICE_NAME=ProjectName
## 脚本日志
LOG_NAME=/tmp/timedTask/project.log
PID=`ps -ef | grep -w "$SERVICE_NAME" | grep -v "grep" | awk '{print $2}'`
if [ "$PID" == "" ]; then
## 项目不在运行
echo -e "\n==================== $(date +'%F %T')" >> $LOG_NAME
## 重启项目,注意:不同的项目和环境重启项目方式各不相同,以自己的为准
nohup java -Xms1024m -Xmx1024m -jar $SERVICE_DIR/$SERVICE_NAME\.jar --spring.profiles.active=prod
## 休眠10秒,重新检测项目,并打印其PID
sleep 10
PID2=`ps -ef | grep -w "$SERVICE_NAME" | grep -v "grep" | awk '{print $2}'`
if [ "$PID2" == "" ]; then
echo -e "\e[1;31m 无法找到$SERVICE_NAME服务,重启服务失败,需要开发人员紧急处理!!! \e[0m" >> $LOG_NAME
else
echo -e "\e[1;31m 无法找到$SERVICE_NAME服务,已重启该服务。PID $PID2 \e[0m" >> $LOG_NAME
fi
else
## 项目还在运行
echo -e "\n==================== $(date +'%F %T')" >> $LOG_NAME
echo -e "\e[1;32m $SERVICE_NAME服务已存在,无需重启该服务。PID $PID \e[0m" >> $LOG_NAME
fi
添加定时任务
1、确保crond服务启动
## 检查定时任务 crond服务状态
service crond status
## 如果不存在则启动
service crond start
crond 已启动效果如下:
2、检查当前用户是否有其他定时任务
## 查看当前用户的所有定时任务,为空则表示没有任何定时任务
crontab -l
## 编辑当前用户的定时任务列表,用法跟vim编辑器一致
crontab -e
## 添加如下定时任务,这里是每隔5分钟执行一次。
*/5 * * * * /tmp/timedTask/project.sh
参考文件:crontab用法与实例 | 《Linux就该这么学》 (linuxprobe.com)
效果
至此,一个简单的预防项目离线的Linux脚本就完成了。