如何编写可后台长期运行的脚本以监控指定PID进程状态并在进程结束时发送邮件通知
如何编写可后台长期运行的脚本以监控指定PID进程状态并在进程结束时发送邮件通知
嘿,这个需求其实挺常见的,我来给你一步步拆解实现方案,保证简单好用且能长期后台运行~
核心思路
我们要做的就是写一个循环脚本,定期检查目标PID是否存活;一旦发现进程退出,立刻发送预设的邮件通知,然后脚本就可以结束任务了。
具体脚本实现
下面是完整的监控脚本,我加了详细注释,你可以直接复制修改使用:
#!/bin/bash # 配置监控参数:你可以直接写死PID,或者改成接收命令行参数(后面会说) MONITOR_PID="12345" # 检查间隔(单位秒),因为进程要跑好几天,不用太频繁,这里设1分钟(60秒) CHECK_INTERVAL=60 echo "✅ 开始监控PID $MONITOR_PID,将每隔${CHECK_INTERVAL}秒检查一次..." # 无限循环检查直到进程退出 while true; do # 关键:用kill -0检查进程是否存在——这个命令不会真的杀死进程,只是验证进程是否存活 # 2>/dev/null 是把"进程不存在"的错误提示吃掉,避免输出冗余信息 if ! kill -0 "$MONITOR_PID" 2>/dev/null; then # 进程退出时发送邮件 mail -s "⚠️ PID进程退出通知" abc@gmail.com <<< "PID $MONITOR_PID 已于 $(date) 在主机 $HOSTNAME 上退出。" echo "⚠️ PID $MONITOR_PID 已退出,邮件已发送,监控任务结束。" exit 0 fi # 等待指定间隔后再次检查 sleep "$CHECK_INTERVAL" done
脚本使用说明
- 赋予执行权限:先给脚本加可执行权限,执行命令:
chmod +x monitor_pid.sh - 灵活传入PID:如果不想每次修改脚本里的PID,可以把脚本里的
MONITOR_PID="12345"改成MONITOR_PID="$1",这样运行脚本时直接传入PID:./monitor_pid.sh 67890 - 后台长期运行:要让脚本在终端关闭后还能继续跑,用
nohup命令:nohup ./monitor_pid.sh > monitor.log 2>&1 &nohup让脚本脱离终端运行,即使你关掉SSH连接也不会停> monitor.log 2>&1把脚本的输出和错误都写到monitor.log文件里,方便后续查看监控记录
注意事项
- 邮件功能依赖:确保你的系统已经安装了邮件工具(比如
mailutils或mailx),如果没装,Ubuntu/Debian系统可以用sudo apt install mailutils,CentOS/RHEL用sudo yum install mailx,同时要确保系统能正常发送邮件(比如配置好sendmail或postfix服务) - 避免频繁检查:不要把
CHECK_INTERVAL设得太小(比如1秒),不然会占用不必要的系统资源,分钟级的间隔完全足够 - 脚本可靠性:如果担心脚本意外崩溃,也可以把它做成systemd服务(不过对于简单的监控需求,用
nohup就足够了)
备注:内容来源于stack exchange,提问作者Marc
相关产品推荐
相关产品推荐

