supervisord实例配置

本文详细介绍supervisord的参数配置,包括程序名、启动用户、目录、命令等,并提供实例,帮助读者掌握如何配置守护进程,解决常见错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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


supervisord常用的一些参数配置

参数作用示例
process_name程序的名字testSupervisord
user程序启动的用户,默认是rootroot
directory程序启动的目录/home/leon/projects/usercenter
command程序启动的命令python3 test.py
startsecs启动 5 秒后没有异常退出,就当作已经正常启动了5
startretries启动失败时候重试次数,默认3次3
autorestart程序异常退出后自动重启true
autostart在supervisord启动的时候一起启动true
redirect_stderr把 stderr 重定向到 stdout,默认 falsetrue
stdout_logfile_maxbytesstdout 日志文件大小,默认 50MB50MB
stdout_logfile_backupsstdout 日志文件备份数,默认102
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

注意!


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

2. 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
supervisor环境变量:https://blog.youkuaiyun.com/hunter_yang_Tuziki/article/details/86675121

### Supervisor 配置详解 #### 创建配置文件 为了初始化Supervisor配置,在指定路径下创建并写入默认配置文件。通过执行命令可以快速生成基础配置文件: ```bash mkdir /etc/supervisor echo_supervisord_conf > /etc/supervisor/supervisord.conf ``` 此操作将在`/etc/supervisor/`目录下建立必要的结构,并填充初始设置[^3]。 #### 修改服务启动项 为了让系统能够识别到Supervisor作为一项服务,需编辑或新增Systemd的服务定义文件来指明启动参数。具体做法是在`/usr/lib/systemd/system/`位置添加名为`supervisord.service`的新条目,其内部应包含指向实际配置的位置信息: ```ini [Unit] Description=Process Monitoring and Control Daemon After=rc-local.service nss-user-lookup.target [Service] Type=forking ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf [Install] WantedBy=multi-user.target ``` 上述设定确保了当操作系统进入多用户模式时自动加载Supervisor及其关联的任务列表[^4]。 #### 添加受控程序描述 对于每一个想要被监控的应用实例,都需要单独编写相应的`.conf`文件放置于预设好的子目录内(如`/etc/supervisor/conf.d/`)。这里给出一个简单的Java应用程序控制模板供参考: ```ini [program:test_jar] command=java -jar /path/to/application.jar directory=/opt/app/ autostart=true autorestart=true stderr_logfile=/var/log/test_jar.err.log stdout_logfile=/var/log/test_jar.out.log environment=JAVA_HOME="/usr/local/java",PATH="$JAVA_HOME/bin:$PATH" user=admin stopasgroup=true killasgroup=true ``` 这段配置说明了一个名为`test_jar`的进程应该如何运行以及遇到异常情况后的处理方式;同时设置了日志记录策略以便后续排查问题所需[^1]。 #### 应用更改 每当修改过任何配置细节后,记得通知正在运行中的Supervisor重新读取最新的指令集以使改动生效。这一步骤可通过下面这条命令轻松实现: ```bash supervisorctl -u admin -p 123456 -c /application/supervisor/etc/supervisor.conf reload test_jar ``` 该语句不仅会刷新全局状态还会针对特定名称下的任务实施更新动作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小羽Jary

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值