Supervisor Mac 使用介绍

官网:http://supervisord.org/running.html

简介:是一个用python写的进程管理工具。

生产环境或者测试环境,如果担心服务以外挂掉,可以考虑使用supervisor管理进程。

安装:可以使用pip,但是由于是mac系统,更倾向于用brew:

brew install supervisor

/usr/local/etc/supervisord.ini也是supervisord的默认配置文件。

我们先看下配置文件的最后两句:

[include]
files = /usr/local/etc/supervisor.d/*.ini

其他的配置文件可以放在这个位置,会被自动加载。

新写一个简单的forloop的shell:

#!/bin/bash

for ((i=0;i<100;i++))
  do
    echo $i
    sleep 1s
  done

为这个进程写一个supervisor的配置文件my.ini,并放在之前的目录下:

[program:myProgram]
directory = /Users/miracle/Project/shell/ ; 程序的启动目录
command = /Users/miracle/Project/shell/forloop.sh  ; 启动命令
autostart = true     ; 在 supervisord 启动的时候也自动启动
startsecs = 5        ; 启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart = true   ; 程序异常退出后自动重启
startretries = 3     ; 启动失败自动重试次数,默认是 3
stdout_logfile_maxbytes = 20MB  ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20     ; stdout 日志文件备份数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /Users/miracle/supervisor/log.log

第一行,是该程序的唯一标识,后面supervisor使用该标识管理进程。

使用如下命令启动supervisord守护进程:

supervisorctl -c /usr/local/etc/supervisord.ini

ps -ef |grep super
  501  8249     1   0  2:50下午 ??         0:00.89 /usr/local/Cellar/supervisor/4.2.0/libexec/bin/python3.8 /usr/local/bin/supervisord -c /usr/local/etc/supervisord.ini

可以看到已经成功启动。

启动forloop进程:

supervisorctl -c /usr/local/etc/supervisord.ini start myProgram

通过status命令查看状态:

supervisorctl -c /usr/local/etc/supervisord.ini status myProgram

myProgram                        RUNNING   pid 10256, uptime 0:00:31

可以看到,之前的forloop进程已经成功启动。

再次确认下:

ps -ef |grep forloop
  501 10402  8249   0  3:33下午 ??         0:00.01 /bin/bash /Users/miracle/Project/shell/forloop.sh

现在我们测试kill调该进程:

kill -9 10402

再ps看下:

ps -ef |grep forloop
  501 10484  8249   0  3:33下午 ??         0:00.01 /bin/bash /Users/miracle/Project/shell/forloop.sh

可以看到进程没有挂,pid变了。

另外,我们看下supervisord的进程日志,tail -f /usr/local/var/log/supervisord.log:

2020-08-09 15:31:15,084 INFO stopped: myProgram (terminated by SIGTERM)
2020-08-09 15:31:19,744 INFO spawned: 'myProgram' with pid 10256
2020-08-09 15:31:24,760 INFO success: myProgram entered RUNNING state, process has stayed up for > than 5 seconds (startsecs)
2020-08-09 15:33:00,144 INFO exited: myProgram (exit status 0; expected)
2020-08-09 15:33:01,147 INFO spawned: 'myProgram' with pid 10402
2020-08-09 15:33:06,172 INFO success: myProgram entered RUNNING state, process has stayed up for > than 5 seconds (startsecs)
2020-08-09 15:33:53,354 INFO exited: myProgram (terminated by SIGKILL; not expected)
2020-08-09 15:33:54,357 INFO spawned: 'myProgram' with pid 10484
2020-08-09 15:33:59,382 INFO success: myProgram entered RUNNING state, process has stayed up for > than 5 seconds (startsecs)

可以看到,我们kill后,进程被supervisord重新唤起。

停止进程:

supervisorctl -c /usr/local/etc/supervisord.ini stop myProgram

对于stop、status以及start命令,如果想直接运行必须放在supervisorctl命令后,当然可以先运行命令:

supervisorctl -c /usr/local/etc/supervisord.ini

进入交互式命令行,再输入对应stop、status以及start命令等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值