在使用docker容器时,可以有单机的docker-compose批量编排工具,甚至还有集群的k8s之类编排工具,那么在Linux系统中同样也有相关的批量管理进程的工具,其中使用最多的应该就是supervisor。Supervisor是一个用Python写的进程管理工具,可以很方便的用来启动、重启、关闭进程。
supervisor主要由两部分组成:supervisord主要负责管理子进程,响应客户端命令以及日志的输出等;supervisorctl执行命令行客户端,用户可以通过它与不同的supervisord进程联系,获取子进程的状态等。
安装与配置
在Centos7版本后已经集成了supervisor工具,可以直接通过yum命令安装,并设置开机启动服务:
yum install -y supervisor
systemctl enable supervisord
默认的配置文件在/etc/supervisord.conf中,可以设置可视化的页面,也可以设置集中的管理配置文件路径:
;[inet_http_server] ; inet (TCP) server disabled by default ;port=127.0.0.1:9001 ; (ip_address:port specifier, *:port for all iface) ;username=user ; (default is no username (open server)) ;password=123 ; (default is no password (open server))
[supervisorctl]
serverurl=unix:///var/run/supervisor/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 as http_username if set
;password=123 ; should be same as http_password if set
;prompt=mysupervisor ; cmd line prompt (default "supervisor")
;history_file=~/.sc_history ; use readline history if available
[include]#此项是自定义配置文件路径 files = supervisord.d/*.ini
supervisor最为关键的就是自定义的进程管理文件,以下为示例:
[program:leo_zhou]#自定义进程名称 command = ping www.zhouzhifei.com#进程操作命令 directory = /data/program#命令执行路径 autorestart= true#是否异常后重启 autostart = true#是否随supervisor启动 startsecs = 5#启动延时执行 startretries = 3#启动尝试次数 user = root#进程用户 stopsignal = INT#停止信号,默认TERM;中断:INT(类似于Ctrl+C)(kill -INT pid),退出后会将写文件或日志(推荐);终止:TERM(kill -TERM pid);挂起:HUP(kill -HUP pid),注意与Ctrl+Z/kill -stop pid不同;从容停止:QUIT(kill -QUIT pid)
supervisorctl命令
supervisorctl stop(start, restart) xxx/all,停止(启动,重启)某一个进程(xxx)/全部;
supervisorctl reread: 只载入最新的配置文件, 并不重启任何进程;
supervisorctl reload: 载入最新的配置文件,停止原来的所有进程并按新的配置启动管理所有进程;
supervisorctl update: 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启;
supervisor的功能主要是可以自定义管理Linux进程,方便后期的维护,但如果使用了docker容器后,基本就告别进程的管理方式,而以docker容器管理为主导。