知易通
第二套高阶模板 · 更大气的阅读体验

进程监控脚本示例:轻松掌握服务器运行状态

发布时间:2025-12-20 22:51:30 阅读:235 次
{"title":"进程监控脚本示例:轻松掌握服务运行状态","content":"

在日常运维中,经常会遇到某个服务突然卡死或者后台程序意外退出的情况。比如做电商平台的订单处理服务,半夜突然挂了,没人发现,等到早上才发现大量订单堆积,这时候再查原因就晚了。与其被动救火,不如提前设好“看门狗”,自动盯着关键进程,一有问题马上通知。这就是进程监控的价值。

\n\n

一个简单的 Shell 监控脚本

\n

下面这个脚本会定时检查指定进程是否在运行,如果不在,就尝试重启并发送提示信息。适用于 Linux 系统下的常见守护进程。

\n
#!/bin/bash\n# 进程名(可执行文件名或关键词)\nPROCESS_NAME=\"node server.js\"\n# 日志文件路径\nLOG_FILE=/var/log/process_monitor.log\n# 检查间隔(秒)\nINTERVAL=60\n\nwhile true; do\n    # 使用 pgrep 检查进程是否存在\n    if pgrep -f \"$PROCESS_NAME\" > /dev/null 2>&1; then\n        echo \"$(date): $PROCESS_NAME 正在运行。\" >> $LOG_FILE\n    else\n        echo \"$(date): $PROCESS_NAME 未运行,尝试启动...\" >> $LOG_FILE\n        # 启动进程(根据实际路径调整)\n        cd /opt/myapp && nohup node server.js > app.log 2>&1 &\n        # 可选:发送邮件或调用 webhook 告警\n        # curl -X POST https://api.alert.com/notify -d \"msg=$PROCESS_NAME died and restarted\"\n    fi\n    sleep $INTERVAL\ndone
\n\n

如何使用这个脚本

\n

将上面的内容保存为 monitor.sh,然后赋予执行权限:

\n
chmod +x monitor.sh
\n

接着把它放到后台运行:

\n
nohup ./monitor.sh > monitor.log 2>&1 &
\n

也可以加入系统启动项,比如写入 /etc/rc.local,确保服务器重启后也能自动开始监控。

\n\n

更灵活的 Python 实现方式

\n

如果你习惯用 Python,可以用 psutil 库来实现跨平台的进程检查。安装依赖:

\n
pip install psutil
\n

脚本如下:

\n
import psutil\nimport time\nimport subprocess\nfrom datetime import datetime\n\ndef log(msg):\n    print(f\"{datetime.now()}: {msg}\")\n\ndef is_process_running(name_keyword):\n    for proc in psutil.process_iter(['pid', 'name', 'cmdline']):\n        try:\n            cmd = proc.info['cmdline']\n            if cmd and name_keyword in ' '.join(cmd):\n                return True\n        except (psutil.NoSuchProcess, psutil.AccessDenied):\n            pass\n    return False\n\ndef start_process():\n    subprocess.Popen([\n        'node', 'server.js'\n    ], cwd='/opt/myapp', stdout=open('app.log', 'w'), stderr=subprocess.STDOUT)\n\nif __name__ == '__main__':\n    process_name = 'node server.js'\n    while True:\n        if is_process_running(process_name):\n            log(\"服务正常运行中。\")\n        else:\n            log(\"检测到服务停止,正在重启...\")\n            start_process()\n        time.sleep(60)
\n\n

相比 Shell 脚本,Python 版本更容易扩展,比如加上邮件告警、记录到数据库、对接企业微信通知等。

\n\n

结合 crontab 定时检查

\n

不想一直跑循环?也可以把检查逻辑写成单次执行的脚本,通过 crontab 每分钟触发一次:

\n
* * * * * /bin/bash /opt/scripts/check_process.sh
\n

这样更轻量,也便于和其他工具集成。

\n\n

无论是网站后台、数据采集任务还是定时作业,只要是有长期运行需求的程序,都可以套用这些模式。别等到出事才想起来加监控,平时花十分钟配置,关键时刻能省下几小时排查时间。

","seo_title":"进程监控脚本示例分享 | 实用 Shell 与 Python 实现方案","seo_description":"提供进程监控脚本示例,涵盖 Shell 和 Python 两种实现方式,帮助开发者自动检测并重启异常进程,保障服务稳定运行。","keywords":"进程监控,脚本示例,shell脚本,python监控,linux进程管理"}