“守护进程化”(让程序以后台守护进程 Daemon 的形式运行)在不同操作系统和不同使用场景下有多种做法。下面按常见场景系统说明。
nohup(最简单)适合临时运行,不依赖系统服务管理:
nohup python app.py > app.log 2>&1 &
nohup:忽略 SIGHUP(终端关闭不退出)&:后台运行setsid(真正脱离终端)比 nohup 更干净:
setsid python app.py > app.log 2>&1 < /dev/null &
进程会新建一个 session,完全脱离终端。
systemd(推荐,生产环境)现代 Linux 标准方式。
示例:
# /etc/systemd/system/myapp.service
[Unit]
Description=My App
After=network.target
[Service]
ExecStart=/usr/bin/python /opt/app/app.py
WorkingDirectory=/opt/app
User=appuser
Restart=always
[Install]
WantedBy=multi-user.target
启用:
systemctl daemon-reload
systemctl enable myapp
systemctl start myapp
✅ 优点:
supervisord(多进程管理)适合管理多个后台程序:
[program:myapp]
command=python app.py
autostart=true
autorestart=true
stdout_logfile=/var/log/myapp.log
如 Python:
import daemon
with daemon.DaemonContext():
main()
⚠️ 一般更推荐交给 systemd。
使用工具:
nssm(非常简单)sc create示例(nssm):
nssm install MyApp
nssm set MyApp Application python.exe
nssm set MyApp AppParameters app.py
nssm start MyApp
Docker 本身就是守护进程模型:
docker run -d --restart=always myimage
✅ 不需要手动 daemon 化
❌ 以为 & 就是守护进程
❌ 终端关闭后进程仍依赖 shell
❌ 用 nohup 代替系统服务管理
| 场景 | 推荐 |
|---|---|
| 临时测试 | nohup / setsid |
| 生产服务 | systemd |
| 多程序 | supervisord |
| Windows | 服务 / 计划任务 |
| 容器 | Docker |
如果你能告诉我:
我可以给你具体可复制的配置示例。