You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写可后台长期运行的脚本以监控指定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

脚本使用说明

  1. 赋予执行权限:先给脚本加可执行权限,执行命令:
    chmod +x monitor_pid.sh
    
  2. 灵活传入PID:如果不想每次修改脚本里的PID,可以把脚本里的MONITOR_PID="12345"改成MONITOR_PID="$1",这样运行脚本时直接传入PID:
    ./monitor_pid.sh 67890
    
  3. 后台长期运行:要让脚本在终端关闭后还能继续跑,用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 10:18:00