天天看点

supervisor的安装与使用

    • supervisor是什么?
    • 安装supervisor(yum安装,基于centos)
    • 文件配置
    • 管理多个进程
    • 启动、测试
    • web界面操作
    • supervisorctl管理命令
      • 查看任务状态
      • 启动、停止、重启任务
      • 重新加载配置文件

supervisor是什么?

supervisor是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具。可以很方便的监听、启动、停止、重启一个或多个进程。用supervisor管理的进程,当一个进程意外被杀死,supervisor监听到进程死后,会自动将它重启,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。

supervisor只能监控前台程序, 如果你的程序是通过fork方式实现的daemon服务,则不能用它监控。

其实就相当于守护进程了,确保某些服务保持启动的状态,supervisor完全可以做到,而且不用写脚本,不用去循环判断了。

安装supervisor(yum安装,基于centos)

yum install epel-release

yum install supervisor

文件配置

安装完成后,/etc/ supervisord.conf文件,看一下他的include文件地址,就像nginx的include一样,配置文件,我们单独创建配置:

supervisor的安装与使用

我们可以看到,include指向了supervisord.d文件夹,一查看,还真有这个文件夹,我们直接在这个文件夹下创建xxx.ini文件好了,其实也可以自己指定include的路径,也可以指定文件类型xxx.conf,根据自己需要吧,这里我还是按照它指定的好了。

supervisor的安装与使用

创建一个owh.ini文件:

supervisor的安装与使用

内容如下:

[program:still_write] ; 程序名称,在 supervisorctl 中通过这个值来对程序进行一系列的操作
autorestart=True      ; 程序异常退出后自动重启
autostart=True        ; 在 supervisord 启动的时候也自动启动
redirect_stderr=True  ; 把 stderr 重定向到 stdout,默认 false
; environment=PATH="/home/app_env/bin"  ; 可以通过 environment 来添加需要的环境变量,一种常见的用法是使用指定的 virtualenv 环境
command=python /root/test.py  ; 启动命令,与手动在命令行启动的命令是一样的
user=root           ; 用哪个用户启动
directory=/root/  ; 程序的启动目录
stdout_logfile_maxbytes = 20MB  ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20     ; stdout 日志文件备份数
startretries=10               ; 启动失败时的最多重试次数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /data/logs/usercenter_stdout.log
           

创建一个/root/test.py #也就是保证test.py进程一直启动,该进程会一直写文件,你可以时刻查看该文件的内容:cat /root/a.txt

import time
while True:
    a=open('a.txt','a')
    a.write('1')
    a.close()
time.sleep(2)
创建一个输出log文件夹:
mkdir –p /data/logs
           

关于配置文件的全部信息解释,请参照下面这个地址,解释的很全面:

https://www.cnblogs.com/xuezhigu/p/7660203.html

管理多个进程

如果想要监控多几个进程,则直接加多一个[program:Pid_name]即可,这里特别说明一下nginx的监控,因为nginx默认启动是后台的,所以这里需要特别设置一下nginx以前台的方式启动,这样supervisor才能够实时监控:

command=/home/packages/nginx/sbin/nginx -g ‘daemon off;’

配置信息如下:

supervisor的安装与使用

启动、测试

supervisord -c /etc/supervisord.conf #启动supervisor服务

我们可以看到,在/root目录生成了一个a.txt文件,而且会一直增加数据,我们可以ps ax|grep python 查看一下进程:

supervisor的安装与使用

我们发现,已经存在这个进程,如果此时kill掉这个进程,还是会再次启动,经过验证,没有问题。

nginx也在的。

supervisor的安装与使用

web界面操作

在/etc/supervisord.conf 配置文件中,找到inet_http_server,改成你的IP,下面的账号和密码随意设置

supervisor的安装与使用

之后重新加载配置文件使其生效:

supervisorctl update

网页登录:192.168.1.5:9001 #登录之前记得关闭防火墙,或者开放9001端口

输入账号密码:

supervisor的安装与使用

登录后的页面如下:

supervisor的安装与使用

在这里可以通过页面上重启或者停止进程,也可以清除相应进程的log信息

supervisorctl管理命令

查看任务状态

supervisorctl status #查看所有服务状态

supervisor的安装与使用

第一列表示进程名称,也就是上面配置文件定义的头部分:

supervisor的安装与使用
supervisor的安装与使用

第二列表示运行状态,第三列表示进程号,第四列表示运行时间

supervisorctl status still_write #查看单个进程状态

supervisor的安装与使用

启动、停止、重启任务

启动、停止单个任务

supervisorctl stop|start nginx

supervisor的安装与使用

启动、停止所有任务

supervisorctl stop|start all

supervisor的安装与使用

重启单个、或者所有任务

supervisorctl restart all|nginx

supervisor的安装与使用

重新加载配置文件

如果配置文件修改,比如上面的owh.ini文件,比如改变了服务,或者新增了服务,需要重新加载文件信息:

supervisorctl update :配置文件修改后可以使用该命令加载新的配置

supervisorctl reload: 重新启动配置中的所有程序

此时无需重启服务,配置文件的服务将会生效,我发现,这两个命令都可以做到。

继续阅读