最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Linux Shell 脚本编写实现进程存活监控与拉起
时间:2026-07-08 09:40:57 编辑:袖梨 来源:一聚教程网
监控进程存活并自动拉起需用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 &后台启动 - 记录 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=simple或Type=forking - 启用自动重启:
Restart=always、RestartSec=5、StartLimitIntervalSec=60 - 用
systemctl daemon-reload && systemctl enable --now myapp启用服务 - 此时 Shell 脚本可退化为纯启动器,守护逻辑交给 systemd
不复杂但容易忽略细节。关键是选对进程识别方式,控制好重启节奏,再借力 systemd 提升可靠性。
相关文章
- 高德地图路线规划显示异常怎么办 07-09
- 漫蛙漫画官方版正版ios如何安装 07-09
- 胖东来官网地址-胖东来官方网站入口地址 07-09
- investopedia官网中文版入口-investopedia国内能用的官方网页版入口地址 07-09
- 一点文学txt小说网站入口-一点文学小说官网入口地址2026最新 07-09
- 易校园怎么绑定微信 07-09