创建进程守护脚本
vi check_and_restart.sh
check_and_restart.sh 脚本内容:
# 治理服务进程守护
#!/bin/bash
# 导入依赖环境变量
export LD_LIBRARY_PATH="/usr/instantclient_11_2:$LD_LIBRARY_PATH"
# Go 程序的路径
APP_PATH="/home/test/website/govern-service/"
APP_NAME="govern-service"
# 运行状态日志文件
RUNNING_LOG_FILE="/home/test/website/govern-service/check_and_running.log"
# 通用日志文件
LOG_FILE="/home/test/website/govern-service/check_and_restart.log"
# 定义 nohup 日志文件,放在 APP_PATH目录下
NOHUP_LOG_FILE="$APP_PATH/nohup.out"
# 将运行状态日志文件清空,确保只保留最新的日志
> $RUNNING_LOG_FILE
# 使用 pgrep 来检查进程是否存在,而不是 ps 和 grep 的组合
PGREP_RESULT=$(pgrep -x govern-service)
# echo "$(date +\%Y-\%m-\%d_\%H:\%M:\%S): pid: $PGREP_RESULT " >> $LOG_FILE
# 检查程序是否正在运行
if [ -z "$PGREP_RESULT" ]
then
echo "$(date +\%Y-\%m-\%d_\%H:\%M:\%S): $APP_NAME is not running. Restarting..." >> $LOG_FILE
# 启动程序
echo "APP_PATH=$APP_PATH" >> $LOG_FILE
cd $APP_PATH && nohup ./$APP_NAME >> "$NOHUP_LOG_FILE" 2>&1 &
echo "$(date +\%Y-\%m-\%d_\%H:\%M:\%S): $APP_NAME has been restarted." >> $LOG_FILE
else
echo "$(date +\%Y-\%m-\%d_\%H:\%M:\%S): $APP_NAME is running." >> $RUNNING_LOG_FILE
fi
添加执行权限
chmod +x check_and_restart.sh
创建定时任务
crontab -e
# 添加执行脚本
*/1 * * * * /home/test/website/govern-service/check_and_restart.sh
