Linux下使用bash脚本监控程序并自动在screen中重启

本文介绍了一个bash脚本,用于监控程序运行状态,当程序因网络波动等异常停止时,脚本能自动在screen环境中重启程序。脚本通过`ps-ef`命令检查进程是否存在,并利用`grep`和`wc-l`计数,确保监控准确性。同时,文中提到了如何在screen中启动和重启进程的指令,以及如何将这些步骤整合到监控脚本中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

起因

最近写了一个爬取程序,但是时不时的会因为网络波动断掉,又经常想不起来取检查,因此有时候一断就是浪费了好几天的时间,因此多方查找总结,自己写了一个bash脚本,可以实现:

  1. 每隔一段时间检查一遍程序是否还在运行
  2. 如果停止则自动在对应的screen窗口中运行对应的指令

监控脚本

#!/bin/sh
CheckProcess()
{   
    if [ `ps -ef|grep $1 | grep -v grep |wc -l`  -gt 0 ]; then
        echo "${1}正在运行"
    else
        echo "$(date "+%Y-%m-%d %H:%M:%S") ${1}已停止"
        echo "正在重启${1}"
        # 重启指令
    fi
}

while [[ true ]]; do
    echo "$(date "+%Y-%m-%d %H:%M:%S")"
    do
        CheckProcess "ProcessName"
    done
    sleep 5m
done

下面来对这段代码进行讲解:
首先来看 if 判断条件中的这句话

if [ `ps -ef|grep $1 | grep -v grep |wc -l`  -gt 0 ]
  • -gt是一个比较函数,意思是测试一个数是否大于另一个数;大于,为真;否则,为假。
  • ps -ef|grep $1 | grep -v grep |wc -l的作用是打印出系统中所有包含参数 $1 的命令,例如我需要监控的程序的命令行输入为:
    python main.py 2019-01,那么我此处的 $1 就可以设置为2019-01,这行命令就会打印出所有包含2019-01的命令的数量
  • 结合以上两条,如果我需要检测的命令能打印出来,说明程序正在运行,数量就会大于1,if会判断为真
  • Tips: 由于我的进程名比较特别不会有重复,如果你的进程名会和别的不要检测的进程名重复的话,建议修改一下代码换成监控pid,或者使用完整的进程

在Screen中重启进程

由于同时要挂多个进程,因此使用了screen指令。
使用以下命令可以在后台开启screen窗口并运行程序:
首先使用screen -R AAA创建一个AAA的窗口
然后使用

screen -x -S AAA -p 0 -X stuff "你的命令\n"

即可在后台静默打开AAA窗口并运行命令来重启程序了。

整合

建议分别打印前面两步的指令,验证一下是否和自己所想的一致,确认完毕以后就可以拼接作为一个监控脚本了:

# 首先创建脚本文件(并退出)
vim monitor.sh
# 然后设置权限
chmod +x monitor.sh

接着将完整的指令输入monitor.sh

#!/bin/sh
CheckProcess()
{   
    if [ `ps -ef|grep $1 | grep -v grep |wc -l`  -gt 0 ]; then
        echo "${1}正在运行"
    else
        echo "$(date "+%Y-%m-%d %H:%M:%S") ${1}已停止"      
        echo "正在重启${1}"
        screen -x -S AAA -p 0 -X stuff "你的命令\n"
    fi
}

while [[ true ]]; do
    echo "$(date "+%Y-%m-%d %H:%M:%S")"
    do
        CheckProcess "ProcessName"
    done
    sleep 5m
done

然后就大功告成啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值