supervisor守护进程使用方法详细介绍

1、supervisor是什么

supervisor是什么?它是一个名副其实的守护进程,用来管理、控制类unix操作系统中的多个进程,当所管理的进程因为某种原因停止运行后,supervisor能够及时的重新将服务拉起,保证服务持续、稳定运行,它就像你的守护者一样,当你遇到困难时,能够及时挺身而出,救你于危难。

supervisor是一个使用python开发服务端/客户端管理软件,其中服务端称为 supervisord,负责管理子进程、响应客户端命令、记录日志等,客户端称为 supervisorctl,它提供了一个类 shell 的接口,允许用户通过命令行与服务端通信,以控制子进程的状态。

可视化的管理页面

可以重启、停止单个或者所有管理的进程: 

最重要的是,还可能持续观察控制台的输出:

supervisor不仅能够保证我们服务的正常运行,还提供了非常简单、高效的工具,极大的降低了对后台任务管理的成本,非常推荐使用。

2、supervisor安装

下载supervisor源码:

wget https://files.pythonhosted.org/packages/ce/37/517989b05849dd6eaa76c148f24517544704895830a50289cbbf53c7efb9/supervisor-4.2.5.tar.gz

 之后解压:

tar zxvf supervisor-4.2.5.tar.gz

执行命令,安装supervisor:

python3 setup.py install

 查看supervisor是否安装成功:

supervisorctl -h

有以上打印,即为安装成功。

3、编写测试应用程序 

我们先写一个简单的程序,之后使用supervisor将其启动,当程序出现问题后,也能自动重新将其拉起来。

程序就设计一个简单的,死循环打印当前时间,每1s打印一次。

package main
import (
    "fmt"
    "time"
)
func main() {
    for {
        fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
        time.Sleep(1 * time.Second)
    }
}

4、创建supervisor配置

supervisor安装成功后,我们可以通过命令行:

echo_supervisord_conf

获得配置文件的demo,我们只需要稍加修改即可使用,对于配置的详细说明,可以参考官方文档:

https://www.supervisord.org/configuration.html

首先是对supervisor的服务端进行配置:

[unix_http_server]
file=/tmp/supervisor.sock   ; the path to the socket file
[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)
; 客户端与服务端进行交互的通道
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

 这里注意inet_http_server选项,如果要使用web管理页面访问supervisor,必须写成:

0.0.0.0:{PORT}

的形式,示例demo是127.0.0.1,这种写法无法访问web管理页面。

下面是对supervisord自身的配置:

一般情况下,我们只需要修改【logfile】字段即可,把supervisor运行的日志放到合适的路径下。

对supervisor客户端进行配置,只配置一个选项即可,设置客户端通过什么方式与服务端进行连接:

[supervisorctl]
;serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL  for a unix socket
serverurl=http://0.0.0.0:9001 ; use an http:// url to specify an inet socket
;username=chris              ; should be same as in [*_http_server] if set
;password=123                ; should be same as in [*_http_server] if set
;prompt=mysupervisor         ; cmd line prompt (default "supervisor")
;history_file=~/.sc_history  ; use readline history if available

接下来就是对要管理的服务进行配置了

[program:supervisor_study_demo]
command=/root/career/supervisor_study/supervisor_study     ; the program (relative uses PATH, can take args)
process_name=%(program_name)s ; process_name expr (default %(program_name)s)
numprocs=1                    ; number of processes copies to start (def 1)
directory=/root/career/supervisor_study                ; directory to cwd to before exec (def no cwd)
autostart=true                ; start at supervisord start (default: true)
startsecs=1                   ; # of secs prog must stay up to be running (def. 1)
startretries=3                ; max # of serial start failures when starting (default 3)
autorestart=true        ; when to restart if exited after running (def: unexpected)
stopsignal=QUIT               ; signal used to kill process (default TERM)
stdout_logfile=/root/career/supervisor_study/std.log       ; stdout log path, NONE for none; default AUTO
stdout_logfile_maxbytes=100MB   ; max # logfile bytes b4 rotation (default 50MB)
stdout_logfile_backups=10     ; # of stdout logfile backups (0 means none, default 10)

    这里需要注意,对于【process_name】这个选项,配置的是进程启动的后名称:

    如果是启动多个进程,进程名必须唯一,我们修改配置:

    process_name=%(program_name)s_%(process_num)02d  ; process_name expr (default %(program_name)s)
    numprocs=2                    ; number of processes copies to start (def 1)

     启动后,进程名为:

    配置就搞定了。

    5、启动supervisor

    启动命令:

    supervisord -c supervisord.conf

    -c参数是指定配置文件,按实际值传即可。

    supervisor启动后,就可以通过web管理页面对你的后台任务进行管理了。

    文中所用的示例代码、supervisor的配置都在如下地址,需要可取:

    https://github.com/liupengh3c/career

    完工,看个可爱的小熊休息一下,😄😄😄

    欢迎小伙伴们关注、交流,也非常欢迎大家大家关注公众号微信沟通,知无不言~~~~~~~~~~。

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值