温馨提示×

如何守护linux进程运行

小樊
41
2026-09-03 11:32:58
栏目: 智能运维

在 Linux 下“守护进程运行”通常指让进程持续运行、不随终端退出而停止、崩溃后能自动重启。下面按常见场景给你一套实用方案。


一、最基础:让进程不随终端退出

1. nohup

nohup python app.py > app.log 2>&1 &
  • 退出终端后仍运行
  • 输出重定向到 app.log

2. setsid

setsid python app.py > app.log 2>&1
  • 直接新建会话,脱离终端更彻底

3. disown

python app.py &
disown

✅ 适合:临时跑脚本


二、推荐:使用 systemd(服务器首选)

示例:守护一个 Python 服务

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

[Service]
ExecStart=/usr/bin/python3 /opt/myapp/app.py
WorkingDirectory=/opt/myapp
User=myuser
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

启用:

systemctl daemon-reload
systemctl enable myapp
systemctl start myapp

查看状态:

systemctl status myapp
journalctl -u myapp -f

✅ 优点:

  • 崩溃自动重启
  • 开机自启
  • 日志统一管理

三、轻量级守护:supervisor

适合非 systemd 环境多进程管理

安装:

apt install supervisor

配置:

[program:myapp]
command=python3 app.py
directory=/opt/myapp
autostart=true
autorestart=true
stderr_logfile=/var/log/myapp.err.log
stdout_logfile=/var/log/myapp.out.log
supervisorctl reload
supervisorctl status

四、进程自杀 / 被杀怎么办?

常见原因

  • OOM(内存不足)
  • 段错误
  • 依赖服务断连
  • 手动 kill

排查

dmesg | grep -i killed
journalctl -u myapp

五、进阶守护策略

1. 看门狗脚本

while true; do
  pgrep myapp || /opt/myapp/start.sh
  sleep 10
done

2. 容器化(Docker)

docker run -d --restart=always myapp

六、总结建议

场景 推荐方式
临时任务 nohup / setsid
生产服务 systemd
多进程 supervisor
云原生 Docker / K8s

如果你能告诉我:

  • 是什么程序(Python / Java / C++)
  • 是否在服务器
  • 是否要开机启动

我可以直接帮你写一份可复制的配置

0