supervisord实例配置

在supervisord初体验篇我们已经把supervisord搭建起来了,也了解了一些基本的使用方法
supervisord初体验传送门

下面我们就开始配置一个实际使用的实例程序

supervisord常用配置参数

参数 作用 示例
process_name 程序的名字 testSupervisord
user 程序启动的用户,默认是root root
directory 程序启动的目录 /home/leon/projects/usercenter
command 程序启动的命令 python3 test.py
startsecs 启动 5 秒后没有异常退出,就当作已经正常启动了 5
startretries 启动失败时候重试次数,默认3次 3
autorestart 程序异常退出后自动重启 true
autostart 在supervisord启动的时候一起启动 true
redirect_stderr 把 stderr 重定向到 stdout,默认 false true
stdout_logfile_maxbytes stdout 日志文件大小,默认 50MB 50MB
stdout_logfile_backups stdout 日志文件备份数,默认10 2
stderr_logfile 错误日志输出路径 /var/log/supervisor/progress.err.log
stdout_logfile 正常日志输出路径 /var/log/supervisor/progress.out.log
numprocs 启动的守护进程数量 3
priority 守护进程的优先级 999
umask 进程的权限 002
environment 添加环境变量 environment=PYTHONPATH=$PYTHONPATH:/usr/local/lib/python3

注意!
当你的numprocs大于1时:process_name表达式要写成:%(program_name)s_%(process_num)02d

Python环境设置

python的import机制,python中的模块site负责模块导入路径的添加(Append module search paths for third-party packages to sys.path)

查看其main方法,其中有一个addusersitepackages的动作,是导入当前用户的module search paths

进一步查看源码,是通过get_config_var('userbase')获取~/.local(sysconfig.py line 205),而~代表就是环境变量当前用户

所以我们可以通过添加HOME环境变量来让python正确的找到模块导入路径

使用supervisor出现ModuleNotFoundError错误时是因为sys.path未加载所需模块所在的路径,可以通过设置environment来指明所需模块的路径

使用PYTHONPATH指明

environment=PYTHONPATH=/home/user/.local/lib/python3.6/site-packages

对于指定用户安装的python模块(pip install XXX --user 安装用户),也可以通过指定HOME来让python找到模块所在的路径:

environment=HOME=/home/user

实例

下面是官方给出的一个实例

[program:cat]
command=/bin/cat
process_name=%(program_name)s
numprocs=1
directory=/tmp
umask=022
priority=999
autostart=true
autorestart=unexpected
startsecs=10
startretries=3
exitcodes=0
stopsignal=TERM
stopwaitsecs=10
stopasgroup=false
killasgroup=false
user=chrism
redirect_stderr=false
stdout_logfile=/a/path
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=10
stdout_capture_maxbytes=1MB
stdout_events_enabled=false
stderr_logfile=/a/path
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=10
stderr_capture_maxbytes=1MB
stderr_events_enabled=false
environment=A="1",B="2"
serverurl=AUTO

参考文献:
supervisord官方手册:http://supervisord.org/index.html

原文地址:https://www.cnblogs.com/Jaryer/p/13644687.html