温馨提示×

怎样守护linux进程

小樊
56
2026-09-27 17:44:20
栏目: 智能运维

在 Linux 下“守护进程”(让进程持续运行、异常退出能重启、开机自启、不被终端关闭影响)通常有以下几种常见做法,从简单到专业逐步说明。


一、最基础:让进程不被终端关闭(脱离终端)

1. 使用 nohup

nohup python app.py > app.log 2>&1 &
  • 关闭终端进程仍在运行
  • 输出写入 app.log

2. 使用 setsid

setsid python app.py
  • 直接新建会话,彻底脱离终端

3. 使用 disown

python app.py &
disown

✅ 适合:临时运行脚本


二、进程挂了能自动重启(重点)

方式一:systemd(✅ 推荐,服务器标准方案)

1. 编写 service 文件

# /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

2. 常用命令

systemctl daemon-reload
systemctl start myproc
systemctl enable myproc   # 开机自启
systemctl status myproc

✅ 优点:

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

方式二: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

✅ 适合:

  • 容器
  • 老系统
  • Python / Node 项目

方式三:自己写守护脚本(不推荐但可用)

while true; do
    python app.py
    sleep 1
done

或配合 cron:

* * * * * pgrep -f app.py || /opt/app/start.sh

⚠️ 简单但不稳定


三、防止被 OOM / 资源问题杀掉

  • 设置 OOMScoreAdjust
[Service]
OOMScoreAdjust=-500
  • 限制资源(防止拖垮系统)
MemoryMax=512M
CPUQuota=50%

四、进程安全建议

  • 用专用用户运行(不要用 root)
  • 日志轮转(logrotate)
  • 最小权限
  • 防火墙限制访问

五、总结选择建议

场景 推荐方式
服务器长期运行 ✅ systemd
容器 / 脚本管理 supervisor
临时测试 nohup / setsid
极端简单 while 循环

如果你愿意,可以告诉我:

  • 是什么程序(Python / Java / Go / Shell)
  • 是否是服务器 / 容器
  • 是否需要开机启动 & 自动重启

我可以给你针对性的完整配置示例。

0 踩