一文搞懂supervisord是什么?

一 简介

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 updatesupervisorctl 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_logfilestderr_logfile 后,Supervisor 会帮你捕获和管理这些输出。你还可以配置日志文件大小和备份数量。
  • 配置错误排查 :修改配置文件后,最好运行 supervisord -c /etc/supervisord.conf 检查配置是否有语法错误。
  • 环境变量 :如果程序依赖特定环境变量,可在配置中使用 environment 设置,例如 environment=PATH="/usr/local/bin"

💎 总结

掌握 Supervisor 能让你更安心地管理各种服务。它安装简单,配置也主要集中在你需要守护的进程上。最关键的是记住两点 :一是它只能管理前台进程 ,二是记得在配置好后用 supervisorctl updatereload 让新配置生效。

本文来源于我的微信公众号Linux运维小白,我会持续更新文章,欢迎大家关注,互相交流学习。

相关推荐
做运维的阿瑞2 小时前
从传统Linux部署到容器化:实践对比与工程化指南
linux·运维·服务器
怀旧,2 小时前
【Linux系统编程】2. Linux基本指令(上)
linux·运维·服务器
迎風吹頭髮3 小时前
Linux内核架构浅谈9-Linux内核的开源生态:开发者协作与版本迭代机制
linux·运维·架构
Wang's Blog3 小时前
Linux小课堂: 文件系统结构与核心命令解析
linux·运维·服务器
2301_787328493 小时前
24.集群及高可用-Keepalived
linux·运维·云原生
早晚会去希腊3 小时前
VScode怎么使用Jupyter并且设置内核
linux·运维·服务器
java_logo4 小时前
n8n Docker 部署手册
运维·docker·容器
爱喝水的鱼丶4 小时前
SAP-ABAP:SAP中的用户确认对话框:深入理解与实践POPUP_TO_CONFIRM
运维·开发语言·学习·sap·abap
Raymond运维4 小时前
MySQL包安装 -- SUSE系列(SUSE资源库安装MySQL)
linux·运维·数据库·mysql