当前位置: 代码迷 >> 综合 >> supervisor mac使用
  详细解决方案

supervisor mac使用

热度:56   发布时间:2024-02-08 20:24:31.0

官网: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/bashfor ((i=0;i<100;i++))doecho $isleep 1sdone

为这个进程写一个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重新唤起。