一 简介
Supervisor 是一个用 Python 编写的进程管理工具,能帮助你监控和控制类 Unix 系统(如 Linux)上的多个进程。它的核心作用是确保你管理的进程持续运行 ,如果某个进程意外崩溃,Supervisor 会自动重启它。
为了帮你快速理解,下面这张图概括了 Supervisor 的核心组件和基本工作流程:
🔧 安装与配置
安装 Supervisor
在 CentOS 或 Red Hat 系统上,你可以使用 yum
命令安装:
shell
# 安装EPEL仓库
sudo yum install epel-release
sudo yum install -y supervisor
也可以使用 Python 的包管理工具 pip
安装:
bash
# 可以是国内的源
pip install supervisor -i https://pypi.tuna.tsinghua.edu.cn/simple
了解配置文件
安装完成后,你需要熟悉配置文件。主要的配置文件是 /etc/supervisord.conf
。
初始配置文件可能不存在,你可以运行以下命令生成:
shell
#1 初始文件可能不存在
[root@jk1][~/alert-gitlab]
$cat /etc/supervisord.conf
cat: /etc/supervisord.conf: No such file or directory
#2 直接生成
echo_supervisord_conf > /etc/supervisord.conf
[root@jk1][~/alert-gitlab]
$echo_supervisord_conf > /etc/supervisord.conf
#3 再次查看
[root@jk1][~/alert-gitlab]
$cat /etc/supervisord.conf |head -5
; Sample supervisor config file.
;
; For more information on the config file, please see:
; http://supervisord.org/configuration.html
建议的设置是:
-
在主配置文件中使用
[include]
部分来引用子配置文件:shell#先提前创建文件夹 [root@jk1][~/alert-gitlab] $ mkdir -p /etc/supervisord.d/
shell[include] files = /etc/supervisord.d/*.ini
这样你可以为每个需要管理的进程创建单独的配置文件(例如
.ini
或.conf
文件),放在/etc/supervisord.d/
目录下,便于管理。
⚙️ 配置一个被管理的进程
假设你有一个需要守护的python 应用 gitlab-alert.py
,需要为它创建一个配置文件(如 /etc/supervisord.d/my_alert.ini
):
shell
vim /etc/supervisord.d/my_alert.ini
shell
[program:gitlab-alert] ; 程序名称,在 Supervisor 中标识该进程
directory=/root/alert-gitlab ; 进程启动时所在的目录
command=python gitlab-alert.py ; 需要运行的命令,必须是前台运行
autostart=true ; 是否随 Supervisor 启动
autorestart=true ; 异常退出时自动重启
startsecs=5 ; 启动后持续5秒视为成功
user=root ; 以什么用户身份运行
stdout_logfile=/var/log/supervisor/gitlab-alert.out.log ; 标准输出日志
stderr_logfile=/var/log/supervisor/gitlab-alert.err.log ; 错误日志
environment=NODE_ENV="production" ; 设置环境变量
关键提醒 :Supervisor 只能管理前台进程 。这意味着你管理的程序不能自己后台运行(daemonize)。如果程序本身是后台服务(如 Nginx、Redis),需要查阅其文档,配置为前台运行模式(通常涉及修改其配置文件,如将 daemon off;
用于 Nginx)。
🛠️ 常用操作命令
熟悉以下命令对管理进程很重要:
操作 | 命令 |
---|---|
启动 Supervisor 服务 | systemctl start supervisord.service |
停止 Supervisor 服务 | systemctl stop supervisord.service |
设置开机自启 | systemctl enable supervisord.service |
查看管理的所有进程状态 | supervisorctl status |
启动某个进程 | supervisorctl start my_node_app |
停止某个进程 | supervisorctl stop my_node_app |
重启某个进程 | supervisorctl restart my_node_app |
重新加载配置 (修改配置文件后) | supervisorctl update 或 supervisorctl reload |
supervisorctl update
会重载配置文件,通常用于配置文件变更后。对于新增的程序,会自动启动;对于已移除的程序,会停止。配置未变动的程序默认不受影响。supervisorctl reload
会重启 Supervisor 主管的所有程序。
你可以直接运行 supervisorctl
进入交互式 Shell,然后输入 help
查看所有可用命令。
🌐 使用 Web 管理界面
Supervisor 提供了一个 Web 界面,可以更方便地查看和管理进程。
要启用它,需要编辑主配置文件 /etc/supervisord.conf
,找到 [inet_http_server]
部分并修改(如下例,注意:此配置允许所有IP访问,请在生产环境设置强密码或限制访问IP):
ini
[inet_http_server]
port=*:9001 ; Web管理后台端口
username=your_user ; 自定义用户名
password=your_password ; 自定义密码
修改后,需要重启 Supervisor 服务 (如 systemctl restart supervisord
)或重载配置(如 supervisorctl reload
)才能使配置生效。
在浏览器访问 http://你的服务器IP:9001
,输入用户名和密码,即可查看进程状态、日志,并进行简单的控制。

💡 进阶提示与常见问题
- 权限问题 :如果遇到权限错误,请确保:
- Supervisor 有权限访问它要运行的程序和日志目录。
- 使用
user
配置项指定运行进程的用户。
- 日志管理 :在程序配置中指定
stdout_logfile
和stderr_logfile
后,Supervisor 会帮你捕获和管理这些输出。你还可以配置日志文件大小和备份数量。 - 配置错误排查 :修改配置文件后,最好运行
supervisord -c /etc/supervisord.conf
检查配置是否有语法错误。 - 环境变量 :如果程序依赖特定环境变量,可在配置中使用
environment
设置,例如environment=PATH="/usr/local/bin"
。
💎 总结
掌握 Supervisor 能让你更安心地管理各种服务。它安装简单,配置也主要集中在你需要守护的进程上。最关键的是记住两点 :一是它只能管理前台进程 ,二是记得在配置好后用 supervisorctl update
或 reload
让新配置生效。
本文来源于我的微信公众号Linux运维小白
,我会持续更新文章,欢迎大家关注,互相交流学习。