supervisord 配置文件详解

By xuhuan 2025-03-19 06:58:55 文章分类:其它

supervisord 是一个用 Python 编写的进程管理工具,它可以帮助你在类 Unix 系统上监控和控制多个进程。supervisord 的配置文件(通常命名为 supervisord.conf)用于定义 supervisord 守护进程和由它管理的子进程的行为。以下是对 supervisord.conf 主要配置项的详细解释:

1. 全局配置部分

[unix_http_server]
file=/tmp/supervisor.sock   ; UNIX 套接字文件路径
;chmod=0700                 ; 套接字文件权限(默认 0700)
;chown=nobody:nogroup       ; 套接字文件所有者

[inet_http_server]         ; HTTP 服务器配置(可选)
port=127.0.0.1:9001        ; 监听地址和端口

[supervisord]
logfile=/var/log/supervisor/supervisord.log ; 主日志文件路径
logfile_maxbytes=50MB       ; 日志文件最大大小
logfile_backups=10          ; 日志文件备份数量
loglevel=info               ; 日志级别(debug, info, warn, error, fatal)
pidfile=/var/run/supervisord.pid ; 进程 ID 文件路径
nodaemon=false              ; 是否以守护进程模式运行
minfds=1024                 ; 最小文件描述符数量
minprocs=200                ; 最小进程数量

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; 连接到 supervisord 的 URL
;serverurl=http://127.0.0.1:9001      ; 如果使用 HTTP 服务器

解释

  • [unix_http_server]:配置 supervisord 的 UNIX 套接字,用于本地进程间通信。
  • [inet_http_server]:配置 HTTP 服务器,允许通过网络访问 supervisorctl 功能。
  • [supervisord]:定义 supervisord 守护进程的基本设置,如日志、PID 文件、运行模式等。
  • [rpcinterface:supervisor]:提供远程过程调用(RPC)接口,允许 supervisorctlsupervisord 通信。
  • [supervisorctl]:配置 supervisorctl 客户端连接到 supervisord 的方式。

2. 程序配置部分

[program:myapp]
command=/path/to/myapp       ; 要执行的命令
process_name=%(program_name)s ; 进程名称
numprocs=1                   ; 启动的进程数量
directory=/path/to/app       ; 工作目录
umask=022                    ; 文件创建掩码
autostart=true               ; 是否在 supervisord 启动时自动启动
autorestart=true             ; 是否自动重启
startsecs=5                  ; 启动成功所需的秒数
startretries=3               ; 启动重试次数
exitcodes=0                  ; 正常退出的退出码
stopsignal=TERM              ; 停止进程的信号
stopwaitsecs=10              ; 停止等待时间
stopasgroup=false            ; 是否作为进程组停止
killasgroup=false            ; 是否作为进程组杀死
user=nobody                  ; 以指定用户身份运行
redirect_stderr=true         ; 是否将标准错误重定向到标准输出
stdout_logfile=/var/log/supervisor/myapp.log ; 标准输出日志文件路径
stdout_logfile_maxbytes=50MB ; 标准输出日志文件最大大小
stdout_logfile_backups=10    ; 标准输出日志文件备份数量
;stdout_capture_maxbytes=1MB ; 捕获标准输出的最大字节数
;stdout_events_enabled=false  ; 是否启用标准输出事件
;stderr_logfile=/var/log/supervisor/myapp_err.log ; 标准错误日志文件路径
;stderr_logfile_maxbytes=50MB ; 标准错误日志文件最大大小
;stderr_logfile_backups=10    ; 标准错误日志文件备份数量
;stderr_capture_maxbytes=1MB ; 捕获标准错误的最大字节数
;stderr_events_enabled=false  ; 是否启用标准错误事件
;environment=A="1",B="2"      ; 环境变量

解释

  • [program:myapp]:定义一个名为 myapp 的程序配置。
  • command:要执行的命令或脚本。
  • process_name:进程的名称,可以使用占位符。
  • numprocs:启动的进程实例数量。
  • directory:命令执行的工作目录。
  • autostart:是否在 supervisord 启动时自动启动该程序。
  • autorestart:是否在程序退出时自动重启。
  • startsecs:程序启动成功所需的最少秒数。
  • startretries:启动失败时的重试次数。
  • exitcodes:认为程序正常退出的退出码。
  • stopsignal:用于停止程序的信号。
  • stopwaitsecs:停止程序时等待的最大秒数。
  • user:以指定用户身份运行程序。
  • redirect_stderr:是否将标准错误重定向到标准输出。
  • stdout_logfile:标准输出日志文件的路径。

3. 组配置部分

[group:mygroup]
programs=myapp1,myapp2       ; 属于该组的程序列表
priority=999                 ; 组的优先级

解释

  • [group:mygroup]:定义一个名为 mygroup 的程序组。
  • programs:包含在该组中的程序名称列表,用逗号分隔。
  • priority:组的优先级,用于确定启动和停止顺序。

4. 包含其他配置文件

[include]
files = /etc/supervisor/conf.d/*.conf

解释

  • [include]:允许包含其他配置文件,方便管理多个程序的配置。

通过合理配置 supervisord.conf,你可以实现对多个进程的有效监控和管理。在修改配置文件后,需要重新加载或重启 supervisord 以使配置生效。例如,可以使用以下命令:

supervisorctl reread
supervisorctl update

这些命令将重新读取配置文件并更新 supervisord 管理的进程。