Linux服务进程定时检测脚本 - 使用crontab实现自动重启

该脚本可以用于定期检测Linux系统中指定服务的运行状态,并在服务停止时自动重启。

脚本代码:

#!/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. 使用 crontab -e 命令编辑 crontab 文件,添加如下命令:
* * * * * sh /path/to/service.sh

其中 /path/to/service.shservice.sh 文件的路径。

注意:

  • 该脚本需要在 Linux 系统下执行,并且需要使用 Bash 来运行。
  • 脚本中需要根据实际情况修改进程数组和进程检测时间间隔等参数。
  • 脚本使用了 ps -ef | grep 'key' | grep -v grep 命令来获取进程信息,请确保您的进程标识可以通过该命令获取到唯一的进程。
  • 如果您在使用过程中遇到问题,请提供更具体的错误信息和环境信息,以便更好地解决问题。
Linux服务进程定时检测脚本 - 使用crontab实现自动重启

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

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