Linux小记(一):Supervisor利器

一、前言
一般在自己机器上搭建环境,可能会有很多个脚本需要在后台启动,比如MQ,Zk,Redis,Kafka等,但是,每次都频繁找bin目录之类的都会很麻烦,Supervisor提供了很好的进程管理,本篇将简单介绍其基本使用。

二、简介

Supervisor ( http://supervisord.org ) 是一个用Python 写的进程管理工具,可以很方便的用来启动、重启、关闭进程(不仅仅是 Python 进程)。除了对单个进程的控制,还可以同时启动、关闭多个进程,比如很不幸的服务器出问题导致所有应用程序都被杀死,此时可以用 supervisor 同时启动所有应用程序而不是一个一个地敲命令启动。

三、安装(基于Mac OSX)

1) brew install python

2) pip install supervisor

注意:mac osx上自带python,可以先卸载或者将其覆盖

四、创建配置文件

1) 使用echo_supervisord_conf命令,到指定的目录,个人不喜欢都放在根目录下,如下:

echo_supervisord_conf > /Users/liaomengge/shell/supervisor/supervisord.conf

2) vi supervisord.conf

; Sample supervisor config file.

[unix_http_server]
file=/Users/liaomengge/shell/supervisor/supervisor.sock   		; (the path to the socket file)

[inet_http_server]         										; inet (TCP) server disabled by default
port=127.0.0.1:9001        										; (ip_address:port specifier, *:port for all iface)
username=liaomengge              								; (default is no username (open server))
password=liaomengge               								; (default is no password (open server))

[supervisord]
logfile=/Users/liaomengge/shell/supervisor/supervisord.log 		; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB        									; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10           									; (num of main logfile rotation backups;default 10)
loglevel=error                									; (log level;default info; others: debug,warn,trace)
pidfile=/Users/liaomengge/shell/supervisor/supervisord.pid 		; (supervisord pidfile;default supervisord.pid)
nodaemon=false               									; (start in foreground if true;default false)
minfds=1024                  									; (min. avail startup file descriptors;default 1024)
minprocs=200                 									; (min. avail process descriptors;default 200)
directory=/Users/liaomengge/shell/supervisor              		; (default is not to cd during start)
childlogdir=/Users/liaomengge/shell/supervisor            		; ('AUTO' child log dir, default $TEMP)

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///Users/liaomengge/shell/supervisor/supervisor.sock

[include]
files = /Users/liaomengge/shell/supervisor/conf/*.conf

注意:默认的配置文件supervisord.pid 以及 supervisor.sock 是放在 /tmp 目录下,但是 /tmp 目录是存放临时文件,里面的文件是会被 Linux 系统删除的,一旦这些文件丢失,就无法再通过 supervisorctl 来执行 restart 和 stop 命令了,将只会得到 unix:///tmp/supervisor.sock 不存在的错误,得注意咯~~~

3) 编写应用程序

单进程的配置:

[program:zk]
command=/Users/liaomengge/local-env/zookeeper/zookeeper-3.3.6-1/bin/zkServer.sh start
autostart=false
autorestart=false
stdout_logfile=/Users/liaomengge/shell/supervisor/log/zk.stdout.log
stderr_logfile=/Users/liaomengge/shell/supervisor/log/zk.stderr.log
stdout_logfile_maxbytes =500MB
stdout_logfile_backups =50
stdout_capture_maxbytes =1MB
stdout_events_enabled =false

多进程的配置:

只需要在单进程的前提下,多增加一个配置文件,如下:

[group:zkCluster]
programs=zk1,zk2
使用start groupName:name或者*(代表全部组员),即可对多进程管理。

说明:配置程序需要交由supervisor管理的文件,指定的目录为上面`[include]`中配置的文件路劲,启动时,会加载conf下所有*.conf文件

五、 初始启动

supervisord -c /etc/supervisord.conf,如下使用的是自定义目录(推荐)

supervisord -c /Users/liaomengge/shell/supervisor/supervisord.conf

建议,在~./bash_profile中配置alias,如下:

alias supervisord='supervisord -c /Users/liaomengge/shell/supervisor/supervisord.conf'

可能会出现如下界面:


解决方案:unlink supervisord.conf     关于其详情可见:https://github.com/Supervisor/supervisor/issues/121

六、 管理界面

执行supervisorctl命令,将会看到如下界面:


之后,可以通过start,stop,restart,reload,update等指令来管理配置的所有子进程。

七、 web 界面

supervisor中还提供了,相应的界面管理,见上面的[inet_http_server]配置,如下:



可以通过图形化界面,查看,停用当前的进程~

八、常见问题解决

1) 通过supervisord可以很方便的管理program,可以同时管理多个program,也可以管理一个program的多个进程。而且提供了命令行、web、xml-rpc的接口来管理和监控进程,通过配置文件,可以指定进程挂掉后如何处理(可以重启或者其它方式处理挂掉的进程),但是,supervisord本身也是一个program,如果它自己挂掉了怎么办???

详情见:http://serverfault.com/questions/96499/how-to-automatically-start-supervisord-on-linux-ubuntu


总结,通过上面的简单配置,就可以轻松的管你的进程了,再也不需要到处去找启动文件了 。。。


参考文档:

https://www.restran.net/2015/10/04/supervisord-tutorial/

http://www.tuicool.com/articles/ZRRF7v

http://supervisord.org/introduction.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值