一文搞懂supervisord是什么?

一 简介

Supervisor 是一个用 Python 编写的进程管理工具,能帮助你监控和控制类 Unix 系统(如 Linux)上的多个进程。它的核心作用是确保你管理的进程持续运行,如果某个进程意外崩溃,Supervisor 会自动重启它。
为了帮你快速理解,下面这张图概括了 Supervisor 的核心组件和基本工作流程:
在这里插入图片描述

🔧 安装与配置

安装 Supervisor

在 CentOS 或 Red Hat 系统上,你可以使用 yum 命令安装:

# 安装EPEL仓库
sudo yum install epel-release  
sudo yum install -y supervisor

也可以使用 Python 的包管理工具 pip 安装:

# 可以是国内的源
pip install supervisor -i https://pypi.tuna.tsinghua.edu.cn/simple

了解配置文件

安装完成后,你需要熟悉配置文件。主要的配置文件是 /etc/supervisord.conf

初始配置文件可能不存在,你可以运行以下命令生成:

#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] 部分来引用子配置文件:

    #先提前创建文件夹
    [root@jk1][~/alert-gitlab]
    $ mkdir -p /etc/supervisord.d/
    
    [include]
    files = /etc/supervisord.d/*.ini
    

    这样你可以为每个需要管理的进程创建单独的配置文件(例如 .ini.conf 文件),放在 /etc/supervisord.d/ 目录下,便于管理。

⚙️ 配置一个被管理的进程

假设你有一个需要守护的python 应用 gitlab-alert.py,需要为它创建一个配置文件(如 /etc/supervisord.d/my_alert.ini):

vim /etc/supervisord.d/my_alert.ini
[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):

[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运维小白,我会持续更新文章,欢迎大家关注,互相交流学习。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值