一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

linux中使用 supervisor 管理进程

时间:2016-09-20 编辑:简简单单 来源:一聚教程网

一,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

热门栏目