Linux 进程守护神:Supervisor 从入门到精通
在 Linux 环境中,我们经常会遇到这样的场景:
-
一个后端服务运行一段时间后异常退出
-
Python / Node / Java 程序需要在后台长期运行
-
SSH 断开后,进程就跟着没了
-
希望进程崩溃后自动重启
这时,你就需要一个进程守护(Process Supervisor)工具,而 Supervisor 正是最经典、最稳定的解决方案之一。
一、Supervisor 是什么?
Supervisor 是一个用 Python 编写的 Linux 进程管理与守护工具,主要用于:
-
启动、停止、重启进程
-
监控进程运行状态
-
进程异常退出后自动拉起
-
统一管理多个后台服务
Supervisor 本身不是服务框架,而是服务的“看门狗”。
二、为什么要用 Supervisor?
相比于直接 nohup、 & 或 screen / tmux,Supervisor 的优势非常明显:
| 方式 | 是否自动重启 | 是否开机启动 | 是否统一管理 |
|---|---|---|---|
| nohup | ❌ | ❌ | ❌ |
| screen / tmux | ❌ | ❌ | ❌ |
| systemd | ✅ | ✅ | 偏系统级 |
| Supervisor | ✅ | ✅ | 非常适合应用级 |
适合场景:
-
多个自写服务(爬虫、API、Bot)
-
Python / Node / Go / Java 应用
-
Docker 容器内部进程管理
三、Supervisor 的核心组成
Supervisor 主要由三部分组成:
-
supervisord后台运行的守护进程,负责真正管理子进程
-
supervisorctl命令行管理工具,用于控制进程
-
配置文件定义要守护的程序及其行为规则
四、Supervisor 安装
使用系统包管理器(推荐)
Ubuntu / Debian:
sudo apt updatesudo apt install supervisorCentOS / Rocky / AlmaLinux:
sudo dnf install supervisor安装完成后:
supervisord --version使用 pip 安装(虚拟环境 / 容器中常用)
pip install supervisor然后手动启动:
supervisord五、Supervisor 配置文件结构
主配置文件通常在:
/etc/supervisor/supervisord.conf常见子配置目录:
/etc/supervisor/conf.d/**推荐做法:**一个服务一个 .conf 文件
六、最基础的进程守护示例
以一个 Python 脚本为例:
示例程序
/home/app/test.pyimport time
while True: print("running...") time.sleep(5)编写 Supervisor 配置
新建文件:
/etc/supervisor/conf.d/test.conf内容如下:
[program:test_app]command=python3 /home/app/test.pydirectory=/home/appautostart=trueautorestart=truestartsecs=3stderr_logfile=/var/log/test_app.err.logstdout_logfile=/var/log/test_app.out.log重新加载配置并启动
sudo supervisorctl rereadsudo supervisorctl updatesudo supervisorctl start test_app七、常用配置项说明(重点)
| 配置项 | 作用 |
|---|---|
| command | 启动命令 |
| autostart | Supervisor 启动时是否自动启动 |
| autorestart | 进程异常退出是否自动重启 |
| startsecs | 启动后多少秒算成功 |
| directory | 程序工作目录 |
| user | 以哪个用户运行 |
| stdout_logfile | 标准输出日志 |
| stderr_logfile | 错误日志 |
八、supervisorctl 常用命令
supervisorctl status # 查看所有进程状态supervisorctl start xxx # 启动进程supervisorctl stop xxx # 停止进程supervisorctl restart xxx # 重启进程supervisorctl reload # 重载全部配置九、在 Docker 中使用 Supervisor
Supervisor 非常适合 容器内管理多个进程。
Dockerfile 示例:
RUN apt install -y supervisorCOPY supervisord.conf /etc/supervisor/supervisord.conf
CMD ["supervisord", "-n"]注意:
-
-n 表示前台运行(Docker 必须)
-
不要再额外 service start
十、Supervisor vs systemd
| 对比项 | Supervisor | systemd |
|---|---|---|
| 使用难度 | 低 | 中 |
| 配置复杂度 | 简单 | 偏复杂 |
| 适用范围 | 应用级 | 系统级 |
| Docker 友好度 | 高 | 低 |
结论:
-
服务器应用管理 → Supervisor
-
系统服务 / 守护进程 → systemd
十一、常见坑与注意事项
1. 程序启动立刻退出
-
检查 command 是否正确
-
手动运行一次命令
2. 日志文件无权限
sudo chown -R appuser /var/log/3. 修改配置不生效
一定要执行:
supervisorctl rereadsupervisorctl update结语
Supervisor 是一个简单、稳定、低心智负担的 Linux 进程守护方案,
非常适合:
-
个人服务器
-
自托管服务
-
Docker 容器
-
小型后端项目
如果你已经用腻了 nohup,那 Supervisor 基本就是必学工具。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!