首页 > Linux工具使用 > linux中使用 supervisor 管理进程

linux中使用 supervisor 管理进程

2016年11月13日

linux中使用 supervisor 管理进程
http://www.111cn.net/sys/linux/119839.htm
supervisor就是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启
一,supervisor 简介
通常我们要启动一个服务时,例如 nginx,一般使用 service nginx start 或者 /etc/init.d/nginx start ,但是当系统运行多个服务时,一个个启动与停止则很麻烦,当服务故障时,还得手动进行重启,supervisor 正好能解决这些问题,supervisor 是一个用 Python 写的 C/S 进程管理工具,可以很方便的用来启动、重启、关闭进程,在批量服务化管理时特别有效,可以对多个进程同时进行管理并且可以监控进程,当某个服务出现故障时,它能自动监测到并能重新启动。
supervisor 由 C/S 两部分组成:
supervisord(server 部分):主要负责管理子进程,响应客户端命令以及日志的输出等;
supervisorctl(client 部分):用户可以通过它与不同的 supervisord 进程联系,获取子进程的状态等。
二,supervisor 安装和配置
1,安装,直接使用 pip 安装或者 easy_install
# pip install supervisor
2,生成配置文件
安装好supervisor之后,默认是没有生成配置文件的。可以通过以下命令生成配置文件
# echo_supervisord_conf > /etc/supervisord.conf
3,启动 supervisord
可以通过 supervisord 命令启动 supervisord
# supervisord #以 daemon 方式启动
或者
# supervisord -n #以非 daemon 的方式启动
不带参数运行 supervisord 是以 daemon 方式运行
进入 supervisorctl 的 shell 界面
# supervisorctl
supervisor> status
supervisor>
或者直接在命令行查看:
# supervisorctl status
4,配置文件
supervisor 的配置文件详细介绍可以参考此文档 http://lixcto.blog.51cto.com/4834175/1539136 或者官方文档 http://supervisord.org/ ,下面只介绍常用的配置。
[inet_http_server] ; supervisor 的 web 管理界面,这个 web 后台使用 Basic Auth 的方式进行身份认证。
port=222.24.51.147:9001 ; 配置的 ip 地址和端口
username=user ; 用户名
password=123 ; 密码

;进程管理的配置,非常重要
[program:php-fpm]
directory=/ ;进程运行前,会前切换到这个目录
command=/usr/sbin/php-fpm ; 启动命令
user=root
stdout_logfile=/var/log/supervisor/%(program_name)s_access.log ; stdout 日志输出位置
stderr_logfile=/var/log/supervisor/%(program_name)s_err.log ; stderr 日志输出位置
autostart=true ; 在 supervisord 启动的时候自动启动
autorestart=true ; 程序异常退出后自动重启
startsecs=10 ; 启动 10 秒后没有异常退出,就当作已经正常启动

;[include] ; 把所有的配置文件都放在 supervisord.conf 并不是个好主意,一旦管理的进程过多,就很麻烦。
;所以一般都会 新建一个目录来专门放置进程的配置文件,然后通过 include 的方式来获取这些配置信息
; 楼主写的是 files = /etc/supervisord/conf.d/*.conf
;files = relative/directory/*.ini
一份配置文件至少需要一个 [program:x] 部分的配置,来告诉 supervisord 需要管理那个进程。[program:x] 语法中的 x 表示 program name,会在客户端(supervisorctl 或 web 界面)显示,在 supervisorctl 中通过这个值来对程序进行 start、restart、stop 等操作
注意:当 supervisord 以非 daemon 方式运行时,杀掉 supervisord 后,被监控的进程也退出了。而以 daemon 方式运行,杀掉 supervisord 对被监控进程无影响。
5,使用 supervisor 的 web 界面
启动 supervisord 服务后,浏览器输入相应的 url ,下图为 supervisord 的 web 界面:

三,supervisorctl 使用方法
以下为常用命令:
# supervisord: 初始启动Supervisord,启动、管理配置中设置的进程;
# supervisorctl stop(start, restart) xxx,停止(启动,重启)某一个进程(xxx);
# supervisorctl reread: 只载入最新的配置文件, 并不重启任何进程;
# supervisorctl reload: 载入最新的配置文件,停止原来的所有进程并按新的配置启动管理所有进程;
# supervisorctl update: 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启;
部分配置示例:
[program:nginx] ;nginx 配置示例
directory=/
command=/usr/sbin/nginx -c /etc/nginx/nginx.conf
user=root
stdout_logfile=/var/log/supervisor/%(program_name)s_access.log
stderr_logfile=/var/log/supervisor/%(program_name)s_err.log
autostart=true
autorestart=true
startsecs=10
supervisor还要求管理的程序是非daemon程序,supervisord会帮你把它转成daemon程序,
因此如果用supervisor来管理nginx的话,必须在nginx的配置文件里添加一行设置daemon off让nginx以非daemon方式启动。
[program:blog] ;django 配置示例
command=/root/.pyenv/shims/python /root/py/myblog/manage.py runserver 800%(process_num)1d –noreload
process_name=%(program_name)s_%(process_num)d
autostart=true
stdout_logfile= ~/.virtualenvs/super/logs/supervisord_stdout_%(process_num)02d.log
numprocs=2
numprocs_start=0

分类: Linux工具使用 标签:
本文的评论功能被关闭了.