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 默认位置的主要内容,如果未能解决你的问题,请参考以下文章

ini 修改过的新应用程序:supervisor /etc/supervisor/conf.d/my_app.conf

两个不同项目的多个 supervisor.conf

ini supervisor.conf

supervisor进程管理工具

使用Supervisor来管理你的Laravel队列

supervisor进程管理