官网定义:
Supervisor: A Process Control System
Supervisor is a client/server system that allows its users to monitor and control a number of processes on UNIX-like operating systems.
Supervisor是类Unix系统下的一个进程管理工具,用于监控和控制多个进程。当用Supervisor管理的进程意外被杀死时,Supervisor会自动将其重新拉起。Supervisor使用Python开发,在Ubuntu环境下直接安装即可:
1 |
sudo apt-get install supervisor |
Supervisor安装完成后会主要有三个重要的可执行文件:
- supervisord:守护进程,Supervisor的服务端;
- supervisorctl:Supervisor的客户端,用于管理我们委托给Supervisor管理的进程;
- echo_supervisord_conf:生成配置文件;
按照官网提示:
生成配置文件。显然,Ubuntu下面已经建好了配置文件;不过,这个配置文件比echo_supervisord_conf返回的全量配置文件简单得多。具体的配置选项可以去官网查看:
实际上,除了配置文件外,开启自启动的配置文件也已经建好了:
我们可以看到在/etc/supervisor/supervisord.conf配置文件的最后包含了名为/etc/supervisor/conf.d/*.conf的配置文件。根据官网的介绍,在其中增加program相关的配置即可:
根据示例配置文件中的描述:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
; The below sample program section 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 (def 1) ;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,2 ; 'expected' exit codes used with autorestart (default 0,2) ;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 (default 10) ;stdout_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0) ;stdout_events_enabled=false ; emit events on stdout writes (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 (default 10) ;stderr_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0) ;stderr_events_enabled=false ; emit events on stderr writes (default false) ;environment=A="1",B="2" ; process environment additions (def no adds) ;serverurl=AUTO ; override serverurl computation (childutils) |
我们新建一个:
如果Supervisor已经启动,那么可以使用:
1 |
supervisorctl reload |
否则可以使用:
1 2 3 |
supervisord -c /etc/supervisor/supervisord.conf 或 service supervisor restart |
启动Supervisor。使用Supervisor管理的进程启动后,除非通过Supervisor主动停止,否则其他任何主动退出(如Tomcat的shutdown.sh)或者kill命令都会导致进程重启。因此,我们会使用supervisorctl进行操作,常见的命令包括:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#启动Supervisor服务 sudo service supervisor start #停止Supervisor服务 sudo service supervisor stop #查看状态 supervisorctl status #关闭所有任务 supervisorctl shutdown #停止全部进程 supervisorctl stop all #载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程 #注:start、restart、stop都不会载入最新的配置文件 supervisorctl reload #根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启 supervisorctl update #启动、停止、重启、重载某个program supervisorctl start programxxx supervisorctl stop programxxx supervisorctl restart programxxx supervisorctl reoload programxxx |
值得注意的是,Supervisor还支持处理一组进程,不过现在没用到。
Supervisor管理进程状态转换(http://supervisord.org/subprocess.html#process-states):
其中:
- running:进程处于运行状态
- starting:Supervisor收到启动请求后,进程处于正在启动过程中
- stopped:进程处于关闭状态
- stopping:Supervisor收到关闭请求后,进程处于正在关闭过程中
- backoff:进程进入starting状态后,由于马上就退出导致没能进入running状态
- fatal:进程没有正常启动
- exited:进程从running状态退出
参考资料:
1、https://www.jianshu.com/p/68605ac9d06a
2、https://zhuanlan.zhihu.com/p/147305277
转载时请保留出处,违法转载追究到底:进城务工人员小梅 » Ubuntu 18.04中使用Supervisor