supervisor.conf 默认位置
Posted
技术标签:
【中文标题】supervisor.conf 默认位置【英文标题】:supervisor.conf default location 【发布时间】:2012-08-26 21:46:24 【问题描述】:我正在尝试进行自动部署,包括 supervisord 和默认设置路径混淆。
我发现的每个部署方案都使用 /etc/supervisor/supervisor.conf
和 /etc/supervisor/conf.d/
没有任何预设和链接,而且,在通过 apt-get 安装主管包后,这个路径实际上是由示例配置填充的。
在这个example 流程中看起来像这样,没有任何链接和创建类似/etc/supervisor.conf
的东西:
sudo('apt-get -y install supervisor')
put('config/supervisor_gunicorn.conf', '/etc/supervisor/conf.d/gunicorn.conf', use_sudo=True)
sudo('supervisorctl reload')
但在supervisorctl
中,此路径未指定为默认路径,并且假定默认位置在/etc/supervisor.conf
附近某处,因此在manual 中指定
我尝试了所有可能的方式安装主管,但我无法获得结果。
我知道这只是一个愚蠢的小细节,但我将非常感谢您帮助我保持良好的部署计划。
【问题讨论】:
【参考方案1】:来自 ze 实际文档:http://supervisord.org/configuration.html#configuration-file
Supervisor 配置文件通常被命名为 supervisord.conf。 supervisord 和 supervisorctl 都使用它。如果 任一应用程序在没有 -c 选项的情况下启动(该选项 用于告诉应用程序配置文件名 显式),应用程序将寻找一个名为 supervisord.conf 在以下位置,在指定的 命令。它将使用找到的第一个文件。
$CWD/supervisord.conf $CWD/etc/supervisord.conf /etc/supervisord.conf /etc/supervisor/supervisord.conf(自 Supervisor 3.3.0 起) ../etc/supervisord.conf(相对于可执行文件) ../supervisord.conf(相对于可执行文件)
【讨论】:
【参考方案2】:你可能已经通过 pip 安装了 supervisor,因此在
中有未打补丁的版本/usr/local/lib/python2.7/dist-packages/supervisor/
优先于
中的修补版本/usr/lib/pymodules/python2.7/supervisor
有关补丁的详细信息,请参阅 Martjin 的回答。简单的解决方案是:
pip uninstall supervisor
然后重新运行包安装,以防它只是部分安装:
apt-get install supervisor
还要确保您的/etc/supervisor/supervisord.conf
存在。如果没有,您可能需要手动重新创建它,我的看起来像这样:
; supervisor config file
[unix_http_server]
file=/var/run//supervisor.sock ; (the path to the socket file)
chmod=0700 ; sockef file mode (default 0700)
[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
childlogdir=/var/log/supervisor ; ('AUTO' child log dir, default $TEMP)
; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run//supervisor.sock ; use a unix:// URL for a unix socket
; The [include] section can just contain the "files" setting. This
; setting can list multiple files (separated by whitespace or
; newlines). It can also contain wildcards. The filenames are
; interpreted as relative to this file. Included files *cannot*
; include files themselves.
[include]
files = /etc/supervisor/conf.d/*.conf
【讨论】:
似乎不适用于 centos。我需要更改 supervisorctl 配置吗?【参考方案3】:通常默认文件确实是/etc/supervisor.conf
,但Debian distribution patches this(链接到Debian提供的gzip压缩补丁)首先寻找/etc/supervisor/supervisor.conf
:
--- supervisor-3.0a8.orig/src/supervisor/options.py
+++ supervisor-3.0a8/src/supervisor/options.py
@@ -105,7 +105,7 @@
def default_configfile(self):
"""Return the name of the found config file or raise. """
paths = ['supervisord.conf', 'etc/supervisord.conf',
- '/etc/supervisord.conf']
+ '/etc/supervisor/supervisord.conf', '/etc/supervisord.conf']
config = None
for path in paths:
if os.path.exists(path):
因此,使用该补丁,主管在本地目录中查找 supervisord.conf
,在 etc/
子目录中,然后在全局 /etc/supervisor/
和 /etc/
目录中。
Debian安装的默认supervisord.conf
文件末尾有这个:
[include]
files = /etc/supervisor/conf.d/*.conf
导致 supervisord 加载放在 conf.d
目录中的任何额外文件。
【讨论】:
非常感谢!我修改了我的服务器上的软件包安装更改,所以原因是它正在部分安装(也许 pythonbrew 是其他原因)并且补丁没有应用。 不错的发现。我想知道 ubuntu 版本是如何查找 /etc/supervisor/supervisor.conf 的。 在重写 Dockerfile 以使用 Alpine 而不是 Debian Jessie 时,这对我非常有用。我所做的只是将RUN printf "\n[include]\nfiles = /etc/supervisor/conf.d/*.conf\n" >> /etc/supervisord.conf
添加到我的 Dockerfile 中。以上是关于supervisor.conf 默认位置的主要内容,如果未能解决你的问题,请参考以下文章