在 Linux 下“守护进程”(让进程持续运行、异常退出能重启、开机自启、不被终端关闭影响)通常有以下几种常见做法,从简单到专业逐步说明。
nohupnohup python app.py > app.log 2>&1 &
app.logsetsidsetsid python app.py
disownpython app.py &
disown
✅ 适合:临时运行脚本
systemd(✅ 推荐,服务器标准方案)# /etc/systemd/system/myproc.service
[Unit]
Description=My Process
After=network.target
[Service]
ExecStart=/usr/bin/python3 /opt/app/app.py
WorkingDirectory=/opt/app
Restart=always
User=appuser
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start myproc
systemctl enable myproc # 开机自启
systemctl status myproc
✅ 优点:
supervisor(适合非 systemd 或多人管理)apt install supervisor
配置:
[program:myproc]
command=python3 app.py
directory=/opt/app
autostart=true
autorestart=true
user=appuser
stdout_logfile=/var/log/myproc.log
supervisorctl reload
supervisorctl status
✅ 适合:
while true; do
python app.py
sleep 1
done
或配合 cron:
* * * * * pgrep -f app.py || /opt/app/start.sh
⚠️ 简单但不稳定
OOMScoreAdjust[Service]
OOMScoreAdjust=-500
MemoryMax=512M
CPUQuota=50%
| 场景 | 推荐方式 |
|---|---|
| 服务器长期运行 | ✅ systemd |
| 容器 / 脚本管理 | supervisor |
| 临时测试 | nohup / setsid |
| 极端简单 | while 循环 |
如果你愿意,可以告诉我:
我可以给你针对性的完整配置示例。