CentOS7.5 安装supervisor 4.2.1
环境:CentOS 7.5,Python2.7.16
建议使用pip安装
安装
pip install supervisor
安装之后,执行echo_supervisord_conf
,如果能看到配置文件内容,说明安装成功。
生成配置文件
新建/etc/supervisor
目录,然后执行命令:
echo_supervisord_conf > /etc/supervisor/supervisord.conf
配置文件名称建议使用supervisord.conf
,如果你取了别的名称,后面执行supervisorctl
命令时,就需要指定配置文件,否则会报错。
建议配置
以下只显示关键配置,无效或者注释未复制
[unix_http_server]
file=/var/run/supervisor.sock
;chmod=0700 ; socket file mode (default 0700)
;chown=nobody:nogroup ; socket file uid:gid owner
;username=user ; default is no username (open server)
;password=123 ; default is no password (open server)
[supervisord]
logfile=/var/log/supervisor.log
logfile_maxbytes=50MB ; max main logfile bytes b4 rotation; default 50MB
logfile_backups=10 ; # of main logfile backups; 0 means none, default 10
loglevel=info ; log level; default info; others: debug,warn,trace
pidfile=/var/run/supervisor.pid
nodaemon=false ; start in foreground if true; default false
silent=false ; no logs to stdout if true; default false
minfds=1024 ; min. avail startup file descriptors; default 1024
minprocs=200 ; min. avail process descriptors;default 200
;umask=022 ; process file creation umask; default 022
;user=supervisord ; setuid to this UNIX account at startup; recommended if root
;identifier=supervisor ; supervisord identifier, default is 'supervisor'
;directory=/tmp ; default is not to cd during start
;nocleanup=true ; don't clean up tempfiles at start; default false
;childlogdir=/tmp ; 'AUTO' child log dir, default $TEMP
;environment=KEY="value" ; key value pairs to add to environment
;strip_ansi=false ; strip ansi escape codes in logs; def. false
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock
;serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket
;username=chris ; should be same as in [*_http_server] if set
;password=123 ; should be same as in [*_http_server] if set
;prompt=mysupervisor ; cmd line prompt (default "supervisor")
;history_file=~/.sc_history ; use readline history if available
[include]
files = profile/*.ini ;此处建议在/etc/supervisor下新建profile目录,单独存放每个进程的配置
单独进程配置示例:
[program:clear]
command=python /root/api/api.py
directory=/root/api/
autorestart=true
startsecs=3
startretries=3
stdout_logfile=/root/api/api.out.log
stderr_logfile=/root/api/api.err.log
stdout_logfile_maxbytes=2MB
stderr_logfile_maxbytes=2MB
user=root
priority=999
numprocs=1
process_name=%(program_name)s_%(process_num)02d
启动supervisor
supervisord -c /etc/supervisor/supervisord.conf
如果没有报错,说明supervisor
已经正常运行。
管理进程
supervisorctl status //查看所有进程的状态
supervisorctl stop clear //停止clear
supervisorctl start clear //启动clear
supervisorctl restart clear //重启clear
supervisorctl update //配置文件修改后使用该命令加载新的配置
supervisorctl reload //重新启动配置中的所有程序
在我的机器上执行supervisorctl status
之后,显示如下结果:
clear:clear_00 RUNNING pid 30810, uptime 1:59:13
执行supervisorctl
命令时,如果没有指定配置文件,那么它会去下面几个位置查找配置文件:
../etc/supervisord.conf
(Relative to the executable)../supervisord.conf
(Relative to the executable)$CWD/supervisord.conf
$CWD/etc/supervisord.conf
/etc/supervisord.conf
/etc/supervisor/supervisord.conf
(since Supervisor 3.3.0)
我犯过的一个错误就是:配置文件取名不是supervisord.conf
,导致supervisorctl
无法找到可用的配置文件,所以执行就会报错。刚开始我根本找不到问题所在,后来是参考了另外一个人的配置才发现了这其中的区别,顺利解决了问题。希望能够给大家一个参考。