简介
生产环境通常要求程序稳定的运行,如果程序异常退出了,希望有托管进程可以将其重新启动,而 supervisor 就可以很好的实现这个需求。
当然,docker 编排是目前更为主流的方式,但新公司不希望使用 docker,所以才选择 supervisor。
本文操作的环境:
CentOS 7
Python 3.8
安装
建议直接通过 pip 安装,如果系统中有多个 Python,那么先判断一下 pip 指向哪个 Python,命令如下:
# pip --version
pip 21.0.1 from /usr/local/python3.8/lib/python3.8/site-packages/pip (python 3.8)
可以看出,我默认的 pip 指向 Python 3.8,如果你指向的是 Python 2.7,可以使用 pip3 --version
看一下。
通过 pip 安装一下 supervisor,虽然它是 Python 开发的,但可以监控任何前台程序,这里建议使用 pip 安装(我通过 yum 安装会出现一些问题)。
# pip install supervisor
查看安装的版本。
# supervisord -v
4.2.2
基本情况
如果你通过 pip 安装,那么你的配置文件其路径跟我是一样的,位置为 /etc/supervisord.conf
,配置中的含义如下:
为了阅读体验,我放在文末了
如果你没有找到对应的配置,也可以直接复制上面的内容,在对应的路径下构建一个新的配置文件,在启动时指定配置文件为当前这个文件则可。
这里,有几个需要注意的配置。
1.inet_http_server 下的配置用于配置 supervisor 可视化的 web 后台。
[inet_http_server] ; 配置web后台
port=*:9001 ; 指定ip_address:port, 使用 *:port 监听所有 IP
;username=user ; 默认没有用户名 (open server)
;password=123 ; 默认没有密码 (open server)
因为当前的 CentOS 服务有 IP 白名单限制,只有公司内部才能访问,所以我开启了 Web 后台方便我管理,如果是公网可访问的,不建议打开。
2.include 的配置用于指定需监控程序的配置。
[include]
; .ini和.conf都支持
files = /etc/supervisord.d/*.ini
supervisord.conf 是 supervisor 本身的配置,我们通常将监控程序的配置放在其他位置,然后通过 supervisord.conf 的 include 配置指定对应的路径,这里将对应的配置文件放在 /etc/supervisord.d/
路径下。
目前,我只需监控一个名为 videoocr 的 python 项目,该项目主要利用 OCR 技术识别视频中的文字内容,为了避免服务器上其他 Python 环境相互影响,该项目下使用了 python 虚拟环境,使用 venv 命令创建,命令如下:
# cd /project/videoocr
# python -m venv venv
执行时,需要使用虚拟环境中的 python 解释器去执行 python 程序。
理解了上面的内容后,我们来为 videoocr 创建相应的配置。
文末会有完整的配置示例:example.ini,里面注释了配置文件中常用字段的含义。
在对应的目录下创建相应的文件。
vim /etc/supervisord.d/videoocr.ini
配置如下:
[program:videoocr] ; videoocr 为应用名称
directory=/project/videoocr ; 执行目录
command=/project/videoocr/venv/bin/python3 main.py ; 执行命令
autostart=true ; 如果是true,当supervisor启动时,程序将会自动启动
autores