在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