Linux服务进程定时检测脚本 - 自动监控和重启
这段脚本需要在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
使用方法
- 将代码保存为'service.sh'文件
- 修改脚本中的'processArray'数组,添加需要监控的服务进程
- 修改脚本中的'interval'变量,设置检测时间间隔
- 为脚本文件添加执行权限:'chmod +x service.sh'
- 在crontab中添加定时任务:'* * * * * sh /....../service.sh',将'....../service.sh'替换为脚本文件的实际路径
注意事项
- 确保脚本文件所在的目录有执行权限
- 确保脚本中设置的进程标识能够正确识别目标进程
- 可以根据实际情况调整检测时间间隔
常见错误
- 脚本无法执行:检查脚本文件是否具有执行权限
- 进程无法启动:检查脚本中的进程启动命令是否正确
- 进程标识错误:确保脚本中设置的进程标识能够正确识别目标进程
- crontab设置错误:检查crontab中设置的定时任务是否正确
原文地址: https://www.cveoy.top/t/topic/oWtU 著作权归作者所有。请勿转载和采集!