在 Linux 中,让进程持续运行、异常退出后自动重启,通常称为“守护进程”或“进程守护”。下面按常见程度和使用场景给你一个完整说明。
守护进程是:
init / systemdsystemd(✅ 推荐,现代 Linux 标准)# /etc/systemd/system/mydaemon.service
[Unit]
Description=My Daemon
After=network.target
[Service]
ExecStart=/usr/local/bin/mydaemon
Restart=always
RestartSec=5
User=myuser
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start mydaemon
sudo systemctl enable mydaemon
systemctl status mydaemon
journalctl -u mydaemon -f
✅ 优点
✅ 生产环境首选
nohup + &(简单但不推荐)nohup python app.py > app.log 2>&1 &
❌ 缺点:
screen / tmux(仅适合临时)tmux new -s myapp
python app.py
退出:
Ctrl+b d
❌ 缺点:
supervisord(老牌守护工具)yum install supervisor
# 或
apt install supervisor
[program:mydaemon]
command=/usr/bin/python /opt/app.py
autostart=true
autorestart=true
stdout_logfile=/var/log/mydaemon.log
supervisord -c /etc/supervisord.conf
supervisorctl status
✅ 适合:
docker run -d --restart=always myimage
✅ 优点:
import daemon
import time
with daemon.DaemonContext():
while True:
time.sleep(5)
或使用 systemd 管理,而不是自己写 daemon 代码 ✅
| 方式 | 自动重启 | 开机启动 | 推荐度 |
|---|---|---|---|
| systemd | ✅ | ✅ | ⭐⭐⭐⭐⭐ |
| supervisord | ✅ | ✅ | ⭐⭐⭐⭐ |
| Docker | ✅ | ✅ | ⭐⭐⭐⭐⭐ |
| nohup | ❌ | ❌ | ⭐ |
| screen/tmux | ❌ | ❌ | ⭐ |
你可以告诉我:
我可以直接帮你写 可用的 systemd / supervisor 配置文件 ✅