温馨提示×

如何守护Linux进程

小樊
42
2026-08-31 10:27:43
栏目: 智能运维

守护(守护)Linux 进程一般指让进程在后台稳定运行、不随终端退出而结束、异常退出时自动重启等。下面从常见场景和主流方案给你一个系统性的讲解。


一、最基础:让进程“不随终端退出而结束”

1️⃣ 使用 nohup

nohup python app.py > app.log 2>&1 &

特点:

  • 忽略 HUP 信号
  • 输出重定向到 nohup.out
  • 简单,但不具备自动重启能力

2️⃣ 使用 disown

python app.py &
disown

适合临时守护,不适合生产环境。


二、使用 systemd(✅ 强烈推荐)

1️⃣ 创建 service 文件

# /etc/systemd/system/mydaemon.service
[Unit]
Description=My Daemon
After=network.target

[Service]
Type=simple
User=myuser
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/python3 app.py
Restart=always
RestartSec=5
StandardOutput=append:/var/log/mydaemon.log
StandardError=append:/var/log/mydaemon.log

[Install]
WantedBy=multi-user.target

2️⃣ 启动与开机自启

sudo systemctl daemon-reload
sudo systemctl start mydaemon
sudo systemctl enable mydaemon

3️⃣ 查看状态

systemctl status mydaemon
journalctl -u mydaemon -f

✅ 优点:

  • 自动重启
  • 日志管理
  • 开机自启
  • 权限控制

生产环境首选


三、使用 supervisor(适合多进程管理)

1️⃣ 安装

apt install supervisor   # Debian/Ubuntu
yum install supervisor   # CentOS

2️⃣ 配置

# /etc/supervisor/conf.d/mydaemon.conf
[program:mydaemon]
command=/usr/bin/python3 app.py
directory=/opt/myapp
autostart=true
autorestart=true
user=myuser
stdout_logfile=/var/log/mydaemon.log
stderr_logfile=/var/log/mydaemon_err.log

3️⃣ 启动

supervisorctl reread
supervisorctl update
supervisorctl start mydaemon

✅ 适合:

  • 多进程
  • 老系统
  • 开发环境

四、使用 Docker(现代推荐)

docker run -d --restart=always myimage

或者 docker-compose:

restart: always

✅ 优点:

  • 环境隔离
  • 自动重启
  • 易于迁移

五、进程崩溃了怎么办?

方式 自动重启 日志 推荐度
nohup 简单
disown 简单
systemd ⭐⭐⭐⭐⭐
supervisor ⭐⭐⭐⭐
Docker ⭐⭐⭐⭐⭐

六、守护进程的关键点总结

✅ 防止终端退出影响
✅ 异常退出自动重启
✅ 日志可查
✅ 能开机自启
✅ 权限最小化


七、我可以进一步帮你

你可以告诉我:

  • ✅ 是 CentOS / Ubuntu / Debian
  • ✅ 守护的是 Python / Java / Shell / 自研程序
  • ✅ 是否需要 开机自启 / 自动重启 / 资源限制

我可以直接帮你写 完整的 systemd / supervisor 配置

0