您的位置:

supervisor配置详解

一、安装

Supervisor是一款基于Python开发的进程管理工具,具有简单易用、跨平台、可靠稳定、易扩展等优点。在使用该工具之前,首先需要安装。我们可以使用pip或yum进行安装:


pip install supervisor
或
yum install supervisor -y

二、配置文件

在使用Supervisor之前,需要配置一个配置文件。该文件通常位于/etc/supervisord.conf或/etc/supervisor/supervisord.conf。下面是一个简单的配置文件:


[unix_http_server]
file=/var/run/supervisor.sock   ; sock文件路径
[supervisord]
logfile=/var/log/supervisor/supervisord.log   ; 日志文件路径
pidfile=/var/run/supervisord.pid   ; pid文件路径
nodaemon=false   ; 是否使用守护进程模式运行
minfds=1024   ; 文件描述符最小值
minprocs=200   ; 进程数最小值
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock   ; sock文件路径
[program:hello]
command=/usr/local/bin/hello   ; 应用启动命令
autostart=true   ; 是否随supervisord一起启动
autorestart=unexpected   ; 是否自动重启
startsecs=1   ; 启动时等待时间
redirect_stderr=true   ; 是否重定向stderr

三、常用命令

Supervisor提供了一些常用的命令,方便我们进行管理:

  • supervisord:启动supervisord
  • supervisorctl start [program name]:启动指定的进程
  • supervisorctl stop [program name]:停止指定的进程
  • supervisorctl restart [program name]:重启指定的进程
  • supervisorctl status:查看所有进程的状态

四、进程配置

在配置文件中,我们需要对要管理的进程进行配置。下面是一个完整的进程配置:


[program:myprogram]
command=/path/to/myprogram   ; 应用启动命令
directory=/path/to/myprogram   ; 应用所在目录
user=myuser   ; 应用所属用户
autostart=true   ; 是否随supervisord一起启动
autorestart=true   ; 是否自动重启
startretries=3   ; 启动失败时重试次数
redirect_stderr=true   ; 是否重定向stderr
stdout_logfile=/var/log/myprogram.log   ; 标准输出日志文件路径
stdout_logfile_maxbytes=1MB   ; 标准输出日志文件最大大小
stdout_logfile_backups=10   ; 标准输出日志文件最大备份数
stderr_logfile=/var/log/myprogram.err   ; 标准错误日志文件路径
stderr_logfile_maxbytes=1MB   ; 标准错误日志文件最大大小
stderr_logfile_backups=10   ; 标准错误日志文件最大备份数

上述配置中,command、directory、user、autostart、autorestart等参数都已经说明清楚,下面我们着重介绍一下日志相关的参数:

  • redirect_stderr:表示是否重定向标准错误输出,如果为true,则会将标准错误输出到supervisord的日志文件中。
  • stdout_logfile:表示标准输出日志文件路径。
  • stdout_logfile_maxbytes:表示标准输出日志文件最大大小。
  • stdout_logfile_backups:表示标准输出日志文件最大备份数。
  • stderr_logfile:表示标准错误日志文件路径。
  • stderr_logfile_maxbytes:表示标准错误日志文件最大大小。
  • stderr_logfile_backups:表示标准错误日志文件最大备份数。

五、常见问题

1. 无法启动

如果无法启动supervisord,可以查看/var/log/supervisor/supervisord.log,里面通常会包含具体的错误信息。

2. 端口被占用

如果端口被占用,可以修改/etc/supervisord.conf或/etc/supervisor/supervisord.conf中的配置文件,将使用的端口号改为未被占用的端口号。

3. 日志文件增长过快

如果日志文件增长过快,可以通过设置logrotate来解决。在/etc/logrotate.d目录下创建一个新的文件,例如myprogram:


/var/log/myprogram.log {
    daily
    rotate 10
    missingok
    notifempty
    compress
}

这个文件表示每天进行一次日志轮转,最多保留10个备份,如果日志文件不存在,则不进行错误提示,如果日志文件为空,则不进行日志轮转,最后进行压缩。