Supervisor 官网
一、介绍
Supervisor有四个组件:
1. supervisord
运行Supervisor的后台服务,它用来启动和管理那些你需要Supervisor管理的子进程,响应客户端发来的请求,重启意外退出的子进程,将子进程的stdout和stderr写入日志,响应事件等。它是Supervisor最核心的部分。
2. supervisorctl
相当于supervisord的客户端,它是一个命令行工具,用户可以通过它向supervisord服务发指令,比如查看子进程状态,启动或关闭子进程。它可以连接不同的supervisord服务,包括远程机上的服务。
3. Web服务器
这是supervisord的Web客户端,用户可以在Web页面上完成类似于supervisorctl的功能。
4. XML-RPC接口
这是留给第三方集成的接口,你的服务可以在远程调用这些XML-RPC接口来控制supervisord管理的子进程。上面的Web服务器其实也是通过这个XML-RPC接口实现的。
二、安装
1、pip 安装
pip3 install supervisor
2、easy_install 安装:
yum install python-setuptools
easy_install supervisor
3、centos 安装:
yum update
yum install -y epel-release
yum install -y supervisor
4、Debian/Ubuntu 安装 (我的是这个)
apt-getinstall supervisor
注意,安装后配置文件生成:
1、通过easy_install或pip安装后, 没有supervisor的配置文件
mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf
2、使用 apt-get 安装后,supervisor的主配置文件在:
# 主进程配置文件
/etc/supervisor/supervisord.conf
# 子进程配置文件, ini or conf 均可, 只要和主进程文件配置保持一致 均可
/etc/supervisor/conf.d/*ini or /etc/supervisor/conf.d/*conf
# 这句执行不执行都可以,因为本身也有该文件。 下面我会附加 supervisord.conf(主进程设置)
echo_supervisord_conf > /etc/supervisor/supervisord.conf
/etc/supervisor/supervisord.conf 主进程配置文件
; Sample supervisor config file.;; For more information on the config file, please see:; http://supervisord.org/configuration.html
;; Notes:;- Shell expansion ("~"or"$HOME")isnot supported. Environment
; variables can be expanded using this syntax:"%(ENV_HOME)s".;- Quotes around values are not supported,exceptin the case of
; the environment= options as shown below.;- Comments must have a leading space:"a=b ;comment"not"a=b;comment".;- Command will be truncated if it looks like a config file comment, e.g.;"command=bash -c 'foo ; bar'" will truncate to "command=bash -c 'foo ".;; Warning:; Paths throughout this example file use /tmp because it is available on most
; systems. You will likely need to change these to locations more appropriate
;for your system. Some systems periodically delete older files in/tmp.; Notably,if the socket file defined in the [unix_http_server] section below
;is deleted, supervisorctl will be unable to connect to supervisord.[unix_http_server]file=/var/run/supervisor.sock ; the path to the socket file;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); Security Warning:; The inet HTTP server isnot enabled by default. The inet HTTP server is; enabled by uncommenting the [inet_http_server] section below. The inet
; HTTP server is intended for use within a trusted environment only. It
; should only be bound to localhost or only accessible from within an
; isolated, trusted network. The inet HTTP server does not support any; form of encryption. The inet HTTP server does not use authentication
; by default (see the username=and password= options to add authentication).; Never expose the inet HTTP server to the public internet.[inet_http_server]; inet (TCP) server disabled by default
port=*:9001; ip_address:port specifier,*:port forall iface
username=admin ; default is no username (open server)
password=123456; default is no password (open server)[supervisord]
logfile=/var/log/supervisord.log ; main log file; default $CWD/supervisord.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/supervisord.pid ; supervisord pidfile; default supervisord.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 isnot 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
; The rpcinterface:supervisor section must remain in the config filefor; RPC (supervisorctl/web interface) to work. Additional interfaces may be
; added by defining them in separate [rpcinterface:x] sections.[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
; The supervisorctl section configures how supervisorctl will connect to
; supervisord. configure it match the settings in either the unix_http_server
;or inet_http_server section.[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL for a unix socket
;serverurl=http://127.0.0.1:9001; use an http:// url to specify an inet socket
;username=chris ; should be same asin[*_http_server]ifset;password=123; should be same asin[*_http_server]ifset;prompt=mysupervisor ; cmd line prompt (default "supervisor");history_file=~/.sc_history ; use readline history if available
; The sample program section below shows all possible program subsection values.; Create one or more 'real' program: sections to be able to control them under
; supervisor.;[program:theprogramname];command=/bin/cat ; the program (relative uses PATH, can take args);process_name=%(program_name)s ; process_name expr (default %(program_name)s);numprocs=1; number of processes copies to start (def1);directory=/tmp ; directory to cwd to before exec(def no cwd);umask=022; umask for process (default None);priority=999; the relative start priority (default 999);autostart=true ; start at supervisord start (default: true);startsecs=1;# of secs prog must stay up to be running (def. 1);startretries=3;max# of serial start failures when starting (default 3);autorestart=unexpected ; when to restart if exited after running (def: unexpected);exitcodes=0;'expected' exit codes used with autorestart (default 0);stopsignal=QUIT ; signal used to kill process (default TERM);stopwaitsecs=10;max num secs to wait b4 SIGKILL (default 10);stopasgroup=false ; send stop signal to the UNIX process group (default false);killasgroup=false ; SIGKILL the UNIX process group (def false);user=chrism ; setuid to this UNIX account to run the program
;redirect_stderr=true ; redirect proc stderr to stdout (default false);stdout_logfile=/a/path ; stdout log path, NONE for none; default AUTO
;stdout_logfile_maxbytes=1MB ;max# logfile bytes b4 rotation (default 50MB);stdout_logfile_backups=10;# of stdout logfile backups (0 means none, default 10);stdout_capture_maxbytes=1MB ; number of bytesin'capturemode'(default 0);stdout_events_enabled=false ; emit events on stdout writes (default false);stdout_syslog=false ; send stdout to syslog with process name (default false);stderr_logfile=/a/path ; stderr log path, NONE for none; default AUTO
;stderr_logfile_maxbytes=1MB ;max# logfile bytes b4 rotation (default 50MB);stderr_logfile_backups=10;# of stderr logfile backups (0 means none, default 10);stderr_capture_maxbytes=1MB ; number of bytesin'capturemode'(default 0);stderr_events_enabled=false ; emit events on stderr writes (default false);stderr_syslog=false ; send stderr to syslog with process name (default false);environment=A="1",B="2"; process environment additions (def no adds);serverurl=AUTO ; override serverurl computation (childutils); The sample eventlistener section below shows all possible eventlistener
; subsection values. Create one or more 'real' eventlistener: sections to be
; able to handle event notifications sent by supervisord.;[eventlistener:theeventlistenername];command=/bin/eventlistener ; the program (relative uses PATH, can take args);process_name=%(program_name)s ; process_name expr (default %(program_name)s);numprocs=1; number of processes copies to start (def1);events=EVENT ; event notif. types to subscribe to (req'd);buffer_size=10; event buffer queue size (default 10);directory=/tmp ; directory to cwd to before exec(def no cwd);umask=022; umask for process (default None);priority=-1; the relative start priority (default -1);autostart=true ; start at supervisord start (default: true);startsecs=1;# of secs prog must stay up to be running (def. 1);startretries=3;max# of serial start failures when starting (default 3);autorestart=unexpected ; autorestart if exited after running (def: unexpected);exitcodes=0;'expected' exit codes used with autorestart (default 0);stopsignal=QUIT ; signal used to kill process (default TERM);stopwaitsecs=10;max num secs to wait b4 SIGKILL (default 10);stopasgroup=false ; send stop signal to the UNIX process group (default false);killasgroup=false ; SIGKILL the UNIX process group (def false);user=chrism ; setuid to this UNIX account to run the program
;redirect_stderr=false ; redirect_stderr=true isnot allowed for eventlisteners
;stdout_logfile=/a/path ; stdout log path, NONE for none; default AUTO
;stdout_logfile_maxbytes=1MB ;max# logfile bytes b4 rotation (default 50MB);stdout_logfile_backups=10;# of stdout logfile backups (0 means none, default 10);stdout_events_enabled=false ; emit events on stdout writes (default false);stdout_syslog=false ; send stdout to syslog with process name (default false);stderr_logfile=/a/path ; stderr log path, NONE for none; default AUTO
;stderr_logfile_maxbytes=1MB ;max# logfile bytes b4 rotation (default 50MB);stderr_logfile_backups=10;# of stderr logfile backups (0 means none, default 10);stderr_events_enabled=false ; emit events on stderr writes (default false);stderr_syslog=false ; send stderr to syslog with process name (default false);environment=A="1",B="2"; process environment additions
;serverurl=AUTO ; override serverurl computation (childutils); The sample group section below shows all possible group values. Create one
;or more 'real' group: sections to create "heterogeneous" process groups.;[group:thegroupname];programs=progname1,progname2 ; each refers to 'x'in[program:x] definitions
;priority=999; the relative start priority (default 999); The [include] section can just contain the "files" setting. This
; setting can list multiple files (separated by whitespace or; newlines). It can also contain wildcards. The filenames are
; interpreted as relative to this file. Included files *cannot*; include files themselves.[include];files = relative/directory/*.ini
; files =/etc/supervisor/conf.d/*.conf # 均可, 子进程配置保持一致
files =/etc/supervisor/conf.d/*.ini
注:主配置文件说明网上有很多, 大家自行百度了解
子进程配置文件
[program:test]
user=root # 执行进程的用户
directory=/xxx/PythonProject # 脚本的工作目录
command=/user/bin/python xxx.py # 运行的实际命令# 自启
priority=3# 进程启动优先级,默认999,值小的优先启动
startsecs=30#进程持续运行多久才认为是启动成功
autostart=true # supervisor启动时自动该应用
autorestart=true # 程序崩溃时自动重启# 日志
stderr_logfile=/etc/supervisor/log/test/err.log # 输出error日志的文件路径
stdout_logfile=/etc/supervisor/log/test/out.log # 输出日志的文件路径
stdout_logfile_maxbytes = 30MB # stdout日志文件大小,默认 50MB
stdout_logfile_backups =3# stdout日志文件备份数
注: 子进程配置文件也有很多参数, 大家自行百度了解
三、启动服务supervisor 并查看是否生效
/usr/local/python3/bin/supervisord -c -d /etc/supervisor/supervisord.conf
ps -ef |grep supervisord
参数详解
四、 设置开机自启动
systemctl enable supervisord.service
systemctl status supervisord # 检查启动状态
如果报错, 需自行配置 supervisord.service 文件
a、 在指定目录下创建文件supervisord.service
vim /usr/lib/systemd/system/supervisord.service
b.输入以下内容:
[Unit]Description=Supervisor daemon
[Service]Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdownExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]WantedBy=multi-user.target
c、 执行以下命令
systemctl enable supervisord
d、验证是否为开机启动,提示:enabled 表示设置成功!
systemctl is-enabled supervisord
五、开启web页面管理程序
[inet_http_server];HTTP服务器,提供web管理界面
port=127.0.0.1:9001 ;Web管理后台运行的IP和端口,如果开放到公网,需要注意安全性
username=user ;登录管理后台的用户名
password=123;登录管理后台的密码
主进程配置文件 /etc/supervisor/supervisord.conf 中把注释的这几行代码全部解除注释,
然后更改端口,用户名和密码
六、supervisorctl 管理命令
client端的命令行工具,管理子进程,配置文件在/etc/supervisord.d/目录下
# 主进程文件 /etc/supervisord.conf修改, 重新加载配置文件
supervisorctl reload
# 子进程文件修改 /etc/supervisor/conf.d/test.ini 重新加载子配置
supervisorctl update
supervisorctl status # 查看所有进程的状态
supervisorctl status 子进程 # 查看单个子进程的状态:
supervisorctl stop 子进程 # 关闭单个子进程
supervisorctl stop all # 关闭所有子进程
supervisorctl start 子进程 # 启动单个子进程
supervisorctl start all # 启动所有子进程
supervisorctl restart 子进程 # 重启单个子进程
直接执行supervisorctl命令, 进入交互页面
版权归原作者 疯子vs年华 所有, 如有侵权,请联系我们删除。