温馨提示×

linux进程如何守护

小樊
40
2026-08-05 11:21:53
栏目: 智能运维

在 Linux 中,让进程持续运行、异常退出后自动重启,通常称为“守护进程”或“进程守护”。下面按常见程度和使用场景给你一个完整说明。


一、什么是守护进程(Daemon)

守护进程是:

  • 在后台运行
  • 不依赖终端
  • 父进程通常是 init / systemd
  • 长期运行,异常退出可自动恢复

二、常见守护方式(从简单到专业)

✅ 方式一:systemd(✅ 推荐,现代 Linux 标准)

1️⃣ 创建 service 文件

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

[Service]
ExecStart=/usr/local/bin/mydaemon
Restart=always
RestartSec=5
User=myuser

[Install]
WantedBy=multi-user.target

2️⃣ 启动并设置开机自启

sudo systemctl daemon-reload
sudo systemctl start mydaemon
sudo systemctl enable mydaemon

3️⃣ 查看状态

systemctl status mydaemon
journalctl -u mydaemon -f

优点

  • 自动重启
  • 开机启动
  • 日志管理
  • 资源限制(CPU / 内存)

生产环境首选


✅ 方式二:nohup + &(简单但不推荐)

nohup python app.py > app.log 2>&1 &

❌ 缺点:

  • 进程挂了不会自动重启
  • 服务器重启后不会启动

✅ 方式三:screen / tmux(仅适合临时)

tmux new -s myapp
python app.py

退出:

Ctrl+b d

❌ 缺点:

  • 不自动重启
  • 重启机器失效

✅ 方式四:supervisord(老牌守护工具)

安装

yum install supervisor
# 或
apt install supervisor

配置

[program:mydaemon]
command=/usr/bin/python /opt/app.py
autostart=true
autorestart=true
stdout_logfile=/var/log/mydaemon.log

启动

supervisord -c /etc/supervisord.conf
supervisorctl status

✅ 适合:

  • 老系统
  • 非 systemd 环境
  • 多进程管理

✅ 方式五:Docker(容器化守护)

docker run -d --restart=always myimage

✅ 优点:

  • 自动重启
  • 环境隔离
  • 云原生

三、如何把普通进程变成守护进程(编程方式)

C / Python / Shell 常见做法

Python 示例

import daemon
import time

with daemon.DaemonContext():
    while True:
        time.sleep(5)

或使用 systemd 管理,而不是自己写 daemon 代码 ✅


四、进程守护对比总结

方式 自动重启 开机启动 推荐度
systemd ⭐⭐⭐⭐⭐
supervisord ⭐⭐⭐⭐
Docker ⭐⭐⭐⭐⭐
nohup
screen/tmux

五、我可以进一步帮你

你可以告诉我:

  1. 你的 Linux 发行版(CentOS / Ubuntu / Debian)
  2. Shell / Python / Java / Node 哪个程序
  3. 是否需要 开机启动
  4. 是否需要 限制内存 / CPU

我可以直接帮你写 可用的 systemd / supervisor 配置文件

0