守护(守护)Linux 进程一般指让进程在后台稳定运行、不随终端退出而结束、异常退出时自动重启等。下面从常见场景和主流方案给你一个系统性的讲解。
nohupnohup python app.py > app.log 2>&1 &
特点:
nohup.outdisownpython app.py &
disown
适合临时守护,不适合生产环境。
# /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
sudo systemctl daemon-reload
sudo systemctl start mydaemon
sudo systemctl enable mydaemon
systemctl status mydaemon
journalctl -u mydaemon -f
✅ 优点:
✅ 生产环境首选
apt install supervisor # Debian/Ubuntu
yum install supervisor # CentOS
# /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
supervisorctl reread
supervisorctl update
supervisorctl start mydaemon
✅ 适合:
docker run -d --restart=always myimage
或者 docker-compose:
restart: always
✅ 优点:
| 方式 | 自动重启 | 日志 | 推荐度 |
|---|---|---|---|
| nohup | ❌ | 简单 | ⭐ |
| disown | ❌ | 简单 | ⭐ |
| systemd | ✅ | 强 | ⭐⭐⭐⭐⭐ |
| supervisor | ✅ | 中 | ⭐⭐⭐⭐ |
| Docker | ✅ | 强 | ⭐⭐⭐⭐⭐ |
✅ 防止终端退出影响
✅ 异常退出自动重启
✅ 日志可查
✅ 能开机自启
✅ 权限最小化
你可以告诉我:
我可以直接帮你写 完整的 systemd / supervisor 配置。