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命令时,如果没有指定配置文件,那么它会去下面几个位置查找配置文件:

  1. ../etc/supervisord.conf (Relative to the executable)
  2. ../supervisord.conf (Relative to the executable)
  3. $CWD/supervisord.conf
  4. $CWD/etc/supervisord.conf
  5. /etc/supervisord.conf
  6. /etc/supervisor/supervisord.conf (since Supervisor 3.3.0)

我犯过的一个错误就是:配置文件取名不是supervisord.conf,导致supervisorctl无法找到可用的配置文件,所以执行就会报错。刚开始我根本找不到问题所在,后来是参考了另外一个人的配置才发现了这其中的区别,顺利解决了问题。希望能够给大家一个参考。

标签: python, supervisor, supervisorctl

添加新评论