一、安装
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个备份,如果日志文件不存在,则不进行错误提示,如果日志文件为空,则不进行日志轮转,最后进行压缩。