Linux 进程自动重启配置方法

2次阅读

linux进程自动重启首选systemd(现代发行版),其次supervisor(多进程/老旧系统),最后shell脚本+crontab(临时验证);三者均需配合日志轮转与健康检查。

Linux 进程自动重启配置方法

Linux 进程自动重启的核心目标是:进程意外退出后能被及时捕获并拉起,保障服务持续可用。关键不在于“怎么让它重启”,而在于“谁来监控、何时重启、如何避免雪崩”。主流可靠方案有三种,按推荐度和适用场景排序如下:

systemd 服务管理(推荐用于现代发行版)

这是当前最主流、最稳定的方式,适用于 centos 7+/ubuntu 16.04+ 等使用 systemd 的系统。它原生支持依赖管理、日志集成、重启策略和资源限制。

  • 创建服务文件,例如 /etc/systemd/system/myapp.service

[Unit]
Description=My Web Service
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/myapp
User=www-data
Restart=always
RestartSec=5
StartLimitInterval=0

[Install]
WantedBy=multi-user.target

  • 关键参数说明:
     • Restart=always:除主动 stop 外,崩溃、信号终止、退出码非 0 都触发重启
     • RestartSec=5:每次重启前等待 5 秒,避免高频闪退打满系统
     • StartLimitInterval=0:禁用启动频率限制(默认 10 秒内最多 5 次,超限则暂停)
     • Type=simple:适用于前台运行的程序;若程序 daemonize 自身,改用 Type=forking
  • 启用并启动:
    sudo systemctl daemon-reload
    sudo systemctl enable –now myapp.service

Supervisor 进程守护(适合多进程或老旧系统)

当系统未使用 systemd(如某些嵌入式环境),或需集中管理多个异构应用(Python/Node.js/Java 混合部署)时,Supervisor 是成熟选择。它提供命令行控制(supervisorctl)和简易 Web 界面。

  • 安装与配置(以 debian/Ubuntu 为例):
    sudo apt install supervisor
     新建 /etc/supervisor/conf.d/myapp.conf

[program:myapp]
command=/usr/local/bin/myapp
autostart=true
autorestart=true
startretries=3
user=www-data
redirect_stderr=true
stdout_logfile=/var/log/myapp.log

  • 生效配置:
    sudo supervisorctl reread
    sudo supervisorctl update
    sudo supervisorctl start myapp
  • 优势:自带日志轮转、状态查询直观(supervisorctl status)、支持组管理,适合运维统一维护。

轻量级 Shell 脚本 + crontab(适合临时验证或极简场景)

无需额外安装,适合快速验证或资源受限环境。但注意:它不具备进程父子关系管理,也不记录详细退出原因,仅作兜底补充。

  • 编写监控脚本 /opt/bin/monitor-myapp.sh

#!/bin/sh
APP_NAME=”myapp”
if ! pgrep -f “$APP_NAME” > /dev/NULL; then
  echo “$(date): $APP_NAME not running, restarting…” >> /var/log/myapp-monitor.log
  /usr/local/bin/myapp &
fi

  • 赋予执行权限:chmod +x /opt/bin/monitor-myapp.sh
  • 每分钟检查一次:
    crontab -e,添加一行:
    */1 * * * * /opt/bin/monitor-myapp.sh
  • 提醒:避免脚本本身出错导致无限 fork;建议加简单锁机制(如 touch /tmp/myapp.lock)或用 flock 防重入。

实际选型时,优先用 systemd;已有 Supervisor 生态可延续使用;脚本方案仅建议用于测试环境或过渡期。三者都可配合日志轮转(logrotate)和服务健康检查(如 curl -f http://localhost:8080/health)进一步增强可靠性。

text=ZqhQzanResources