从 Supervisor 3.0 更新到 3.2 之后(在将 14.04 升级到 16.04 时发生),我们用于 Supervisor 的配置似乎不再正常工作。
默认的主管配置完全没有变化,其中唯一重要的参数是:
[include]
files = /etc/supervisor/conf.d/*.conf
该目录中conf.d
有两个文件:一个仅在此系统上使用,另一个符号链接到应用程序目录,因此我们可以在安装中使用相同的配置。
000-通用环境.conf
[supervisord]
directory = /home/applicationuser/domains/<domain>/current
001-programs.conf(符号链接到 /home/applicationuser/domains//current/supervisord.conf)
[program:push-notifications]
rabbitmq:consumer device_notifications --env=prod --no-debug -m 100
autorestart = true
user = applicationuser
command = bin/console rabbitmq:consumer device_notifications --env=prod --no-debug -m 100
当我启动主管时,日志中唯一显示的内容是:
supervisord[11599]: 2018-06-21 08:00:16,549 INFO spawnerr: can't find command 'bin/console'
它尝试了几次,然后因为重试而决定进入 FATAL 状态。这种设置对我们来说一直有效,但现在似乎被破坏了。我是不是忽略了什么?我已经为这个问题绞尽脑汁一段时间了,我需要一些新的眼光来看待这个问题。
答案1
我最终找到了问题所在。我在文档中注意到目录参数仅在守护进程时使用。
在 Supervisor 3.0 中,这是默认设置;显然在升级 ubuntu 和 Supervisor 之后,这种默认行为发生了改变,Supervisor 在命令行上使用 -n 标志运行。
由于某种原因,在 systemd 中删除此标志会导致守护进程崩溃,而从命令行运行 Supervisord 则运行正常。由于我想继续处理更重要的事情,我选择了简单的方法,将 Supervisor 降级到 3.0,一切又恢复正常。