这段脚本需要在Linux系统上运行,因为它使用了Linux的命令和特性。如果在Windows系统上执行,会有很多命令和语法错误。请确保在Linux系统上使用正确的语法和命令来运行此脚本。另外,需要确保脚本文件有执行权限,可以使用命令'chmod +x service.sh'来添加执行权限。

脚本功能

  • 定时检测服务进程是否运行
  • 如果进程异常停止,则自动重启
  • 支持自定义进程数组和检测时间间隔
  • 配合crontab使用,可设置每分钟执行一次

脚本代码

#!/bin/bash
#服务进程定时检测脚本,配合crontab使用,每分钟执行一次
#* * * * * sh /....../service.sh
#按需修改进程数组(processArray),以及进程检测时间间隔(interval)

#进程数组
#key为进程标识,保证通过ps -ef | grep 'key' | grep -v grep可获取到唯一进程,兼容正则表达式,不可包含空格
#value为启动命令
declare -A processArray=(
    ['STLservice']="cd /home/tumispider/tumispider/stl2023 && nohup python3 main.py --tries=3 --backoff=10 > /var/log/STLservice.log 2>&1 &"
)

#进程检测时间间隔,单位秒
interval=2

#脚本执行开始时间戳
startTimeStamp=$(date +%s)

#检测脚本执行时间,如果超过59秒,则退出脚本,参数为脚本执行开始时间戳
function timeCheck()
{
    currTimeStamp=$(date +%s)
    exeTime=`expr $currTimeStamp - $1`
    echo "execute time: $exeTime second"
    if [ $exeTime -ge 59 ]
    then
        echo "done"
        exit 0
    fi
}

#检测进程是否存在,不存在则启动,第一个参数为进程标识,第二个参数为启动命令
function checkProcess()
{
    timeCheck $startTimeStamp

    ps -ef | grep -E '$1' | grep -v grep
    if [ $? -ne 0 ]
    then
        echo "start $1 process"
        eval $2
        echo -e "\n"
    else
        echo -e "$1 process is runing\n"
    fi

    sleep $interval
}

#开始循环检测
while true
do
    for key in ${!processArray[@]}
    do
        checkProcess "$key" "${processArray[$key]}"
    done
done

使用方法

  1. 将代码保存为'service.sh'文件
  2. 修改脚本中的'processArray'数组,添加需要监控的服务进程
  3. 修改脚本中的'interval'变量,设置检测时间间隔
  4. 为脚本文件添加执行权限:'chmod +x service.sh'
  5. 在crontab中添加定时任务:'* * * * * sh /....../service.sh',将'....../service.sh'替换为脚本文件的实际路径

注意事项

  • 确保脚本文件所在的目录有执行权限
  • 确保脚本中设置的进程标识能够正确识别目标进程
  • 可以根据实际情况调整检测时间间隔

常见错误

  • 脚本无法执行:检查脚本文件是否具有执行权限
  • 进程无法启动:检查脚本中的进程启动命令是否正确
  • 进程标识错误:确保脚本中设置的进程标识能够正确识别目标进程
  • crontab设置错误:检查crontab中设置的定时任务是否正确
Linux服务进程定时检测脚本 - 自动监控和重启

原文地址: https://www.cveoy.top/t/topic/oWtU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录