windows配置使用supervisor

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

windows使用supervisor和linux略有不同,严格来说比linux略难,而且不是所有的特性都支持。


一、使用步骤

1.安装supervisor-win

其实有一个纯exe版本的supervisor,但是实际使用起来比python版的功能差些。所以,经过对比还是supervisor-win更有性价比。

建议使用anaconda3,因为本篇文章基于annaconda3,原生python目录请自行查找,这里不再赘述。

pip install supervisor-win -i https://mirrors.aliyun.com/pypi/simple

安装完成后在anaconda的Scripts下面有exe文件。用到的就红框括起来的几个exe。
在这里插入图片描述

2.配置supervisord

使用过linux的都知道/etc/supervisor.conf是配置文件,windows上的配置文件需要用命令生成。

echo_supervisord_conf.exe > D:\supervisord.conf

可以指定目录,不一定非得是D盘。

3.配置program

直接在supervisord.conf里面填就行了。下面是conf示例:

[program:theprogramname]
command=cmd.exe               ; the program (relative uses PATH, can take args)
directory=%(ENV_TMP)s         ; 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=unexpected        ; when to restart if exited after running (def: unexpected)
redirect_stderr=true          ; redirect proc stderr to stdout (default false)
stdout_logfile=a\\path        ; stdout log path, NONE for none; default AUTO
stdout_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)
stdout_logfile_backups=10     ; # of stdout logfile backups (0 means none, default 10)

在supervisord.conf里面 ; 符号是行注释的意思,去掉行注释,这一行就会被supervidord.exe解析。

字段解释:
[program:theprogramname] : 固定写法,theprogramname是程序名字,英文。
command : 需要执行的命令,建议使用绝对路径,而且必须是linux那种正斜杠 / 分割目录
directory : 工作目录
autostart : 自动启动,默认开启
startsecs : 程序至少需要维持1秒才被认为启动成功
startretries : 启动失败尝试次数
autorestart : 自动重新启动,如果程序意外退出生效(保活功能)
redirect_stderr : 重定向标准错误日志输出到标准输出,也可以单独输出,依据喜好。
stdout_logfile : 标准输出目录,可以是反斜杠。目录一定要存在,否则报错。
stdout_logfile_maxbytes : 单文件最大空间,超过了另起一个文件
stdout_logfile_backups : 最多保持的日志文件数

4.启动supervisord.exe

配置好了,就可以管控程序了,实测exe程序都可以管控,有些bat报错,还在研究原因

再此之前还需要改supervidsord.conf的两个地方,这样supervisorctl.exe才能正常工作,没错supervisorctl.exe和supervisord.exe是通过网络连接的。

#默认的配置
;[inet_http_server]         ; inet (TCP) server disabled by default
;port=127.0.0.1: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)

#改为
[inet_http_server]         ; inet (TCP) server disabled by default
port=127.0.0.1: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)

需要用户名密码就解开username和password的注释。

#默认配置
[supervisorctl]
;serverurl=http://127.0.0.1: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

#改为
[supervisorctl]
serverurl=http://127.0.0.1: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

需要用户名密码就解开username和password的注释。

就这样基础配置基本完事了,需要其他功能的自行配置。

启动supervisord.exe才能管控程序

‪D:\conda\envs\supervisord\Scripts\supervisord.exe -c D:\conda\envs\supervisord\Scripts\supervisord.conf

这种启动方式是前台启动,cmd关掉就没了。

5.supervisorctl.exe管控

#重新加载,修改了supervisord.conf必须reload
D:\conda\envs\supervisord\Scripts\supervisorctl.exe reload

#查看状态
D:\conda\envs\supervisord\Scripts\supervisorctl.exe status

#启动程序
D:\conda\envs\supervisord\Scripts\supervisorctl.exe start <program name>

#停止程序
D:\conda\envs\supervisord\Scripts\supervisorctl.exe stop <program name>

这里不多介绍了,基本和linux差不多。

二、后台启动

有好几种方法,这里介绍一种vbs方法

supervisord.vbs

Set ws = CreateObject("Wscript.Shell")
ws.run "D:\Work\Anaconda\envs\supervisord\Scripts\supervisord.exe -c D:\conda\envs\supervisord\Scripts\supervisord.conf",vbhide

双击supervisord.vbs,supervisord.exe就在后台启动了,解析来就可以使用supervisorctl.exe管控了。


总结

1、比linux上的略差些,但是基本功能都有,可以满足使用需求。