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)接口,允许
supervisorctl
与supervisord
通信。 - [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
管理的进程。