监控进程存活并自动拉起需用pgrep -f匹配完整命令或pidof查唯一进程名,避免ps|grep误判;脚本循环检测+nohup启动,记录PID;生产环境须检查配置、端口、权限,限频重启,专用用户运行,重定向日志;推荐交由systemd管理,设Restart=always等参数提升可靠性。
监控进程是否存活,并在异常退出时自动拉起,是运维中常见需求。Shell 脚本实现这一功能不需额外依赖,核心在于持续检查进程状态并合理重启。
最可靠方式是结合 pidof 或 pgrep 检查进程是否存在,再辅以 ps 验证命令行是否匹配,避免误判同名进程。
pgrep -f "your_command" 匹配完整启动命令(如 pgrep -f "/usr/bin/python3 /opt/app/main.py")pidof your_binary_name 更轻量,但仅适用于可执行文件名唯一的情况(如 pidof nginx)ps aux | grep,它容易匹配到 grep 自身或残留日志行一个最小可用的循环监控脚本结构如下:
APP_CMD="/usr/local/bin/myserver --config /etc/myapp.conf")while true; do ... sleep 5; done 实现周期检测nohup $APP_CMD > /dev/null 2>&1 & 后台启动echo $! > /var/run/myapp.pid)便于后续管理生产环境需考虑资源、并发和权限问题:
sudo -u appuser nohup ...)> /var/log/myapp.log 2>&1)脚本写好后,建议通过 systemd 管理,比简单后台运行更稳定:
/etc/systemd/system/myapp.service,设置 Type=simple 或 Type=forking
Restart=always、RestartSec=5、StartLimitIntervalSec=60
systemctl daemon-reload && systemctl enable --now myapp 启用服务不复杂但容易忽略细节。关键是选对进程识别方式,控制好重启节奏,再借力 systemd 提升可靠性。