一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Linux Shell 脚本编写实现进程存活监控与拉起

时间:2026-07-08 09:40:57 编辑:袖梨 来源:一聚教程网

监控进程存活并自动拉起需用pgrep -f匹配完整命令或pidof查唯一进程名,避免ps|grep误判;脚本循环检测+nohup启动,记录PID;生产环境须检查配置、端口、权限,限频重启,专用用户运行,重定向日志;推荐交由systemd管理,设Restart=always等参数提升可靠性。

监控进程是否存活,并在异常退出时自动拉起,是运维中常见需求。Shell 脚本实现这一功能不需额外依赖,核心在于持续检查进程状态并合理重启。

判断进程是否存活

最可靠方式是结合 pidofpgrep 检查进程是否存在,再辅以 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 & 后台启动
  • 记录 PID 到文件(如 echo $! > /var/run/myapp.pid)便于后续管理

增强健壮性与安全性

生产环境需考虑资源、并发和权限问题:

  • 添加启动前检查:确认配置文件存在、端口未被占用、必要目录有写权限
  • 限制重启频率,避免崩溃循环(例如 60 秒内最多重启 3 次,超限则写日志并退出)
  • 使用专用用户运行进程,不要用 root 启动应用(sudo -u appuser nohup ...
  • 重定向标准输出和错误到日志文件,方便排查(> /var/log/myapp.log 2>&1

作为系统服务长期运行

脚本写好后,建议通过 systemd 管理,比简单后台运行更稳定:

  • 新建 /etc/systemd/system/myapp.service,设置 Type=simpleType=forking
  • 启用自动重启:Restart=alwaysRestartSec=5StartLimitIntervalSec=60
  • systemctl daemon-reload && systemctl enable --now myapp 启用服务
  • 此时 Shell 脚本可退化为纯启动器,守护逻辑交给 systemd

不复杂但容易忽略细节。关键是选对进程识别方式,控制好重启节奏,再借力 systemd 提升可靠性。

热门栏目