一切测试在centos7下
安装
yum install -y supervisor
配置
/etc/supervisor.conf
unix_http_server用于让ctl连接,可以给ctl连接设定用户和密码
可以开启一个inet_http_server,用于web管理,不过使用ctl更安全一些。
; Sample supervisor config file.
[unix_http_server]
file=/var/run/supervisor/supervisor.sock ; (the path to the socket file)
;chmod=0700 ; sockef file mode (default 0700)
chown=svisor:nogroup ; socket file uid:gid owner
username=user ; (default is no username (open server))
password=123 ; (default is no password (open server))
[inet_http_server] ; inet (TCP) server disabled by default
port=0.0.0.0: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))
启动
supervisord -c /etc/supervisor.conf
创建进程管理文件
在主配置文件里有include参数,可以把按应用分的ini配置文件包含进去
; [program:xx]是被管理的进程配置参数,xx是进程的名称
[program:xx]
command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run ; 程序启动命令
autostart=true ; 在supervisord启动的时候也自动启动
startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
startretries=3 ; 启动失败自动重试次数,默认是3
user=tomcat ; 用哪个用户启动进程,默认是root
priority=999 ; 进程启动优先级,默认999,值小的优先启动
redirect_stderr=true ; 把stderr重定向到stdout,默认false
stdout_logfile_maxbytes=20MB ; stdout 日志文件大小,默认50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数,默认是10
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.out
stopasgroup=false ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false ;默认为false,向进程组发送kill信号,包括子进程
加载新配置
添加新的ini后,需要让配置生效
使用supervisorctl工具
supervisor> reload
Really restart the remote supervisord process y/N? n
supervisor> update
#reload是重启supervisord
#update是更新配置
开机启动
使用systemctl服务,让supervisord开机自启动,它会自动去使用/etc/supervisor.conf。这样,所有被supervisor管理的ini,都会被托管。
只要在设置里autostart=true,这样就会一起被启动。
一个django的实例
由于使用venv,所以command里要使用对应环境的uwsgi命令
[program:mofang_wsgi]
directory=/data/mofangsvr/
command=/data/mofangsvr/venv/bin/uwsgi --ini mofang.ini
stdout_logfile=/data/mofangsvr/stdout.out
autostart=true
autorestart=true
startsecs=5
priority=1
stopasgroup=true
killasgroup=true
要注意的是,uwsgi的ini文件里,守护进程必须注释掉,suipervisord不支持守护进程启动
# 以守护进程方式提供服, 输出信息将会打印到log中
#daemonize = wsgi.log
一个nginx的实例
要特意关掉守护进程
[program:mofang_nginx]
directory=/data/nginx/
command=/data/nginx/sbin/nginx -g 'daemon off;'
stdout_logfile=/data/nginx/std.out
autostart=true
autorestart=true
startsecs=5
priority=1
stopasgroup=true
killasgroup=true