主管未加载新的配置文件

gru*_*cha 86 deployment supervisord gunicorn

我在使用 Gunicorn 和 Supervisor 部署 Django 应用程序时遇到问题。虽然我可以让 Gunicorn 为我的应用程序提供服务(通过设置适当的 PYTHONPATH 并运行适当的命令,即来自 supervisord 配置的命令),但我无法让主管运行它。它只是看不到我的应用程序。我不知道如何确定配置文件是否正常。

这是 supervisorctl 所说的:

# supervisorctl start myapp_live
myapp_live: ERROR (no such process)
Run Code Online (Sandbox Code Playgroud)

我在 Ubuntu 10.04 上使用以下配置运行它:

文件 /home/myapp/live/deploy/supervisord_live.ini:

[program:myapp_live]
command=/usr/local/bin/gunicorn_django --log-file /home/myapp/logs/gunicorn_live.log --log-level info --workers 2 -t 120 -b 127.0.0.1:10000 -p deploy/gunicorn_live.pid webapp/settings_live.py
directory=/home/myapp/live
environment=PYTHONPATH='/home/myapp/live/eco/lib'
user=myapp
autostart=true
autorestart=true
Run Code Online (Sandbox Code Playgroud)

在 /etc/supervisor/supervisord.conf 文件的末尾,有:

[include]
files = /etc/supervisor/conf.d/*.conf
Run Code Online (Sandbox Code Playgroud)

这是我的配置文件的符号链接:

# ls -la /etc/supervisor/conf.d
lrwxrwxrwx 1 root root   48 Dec  4 18:02 myapp-live.conf -> /home/myapp/live/deploy/supervisord_live.ini
Run Code Online (Sandbox Code Playgroud)

对我来说一切都很好,但 supervisorctl 只是一直说myapp_live: ERROR (no such process)。有什么解决办法吗?

Mar*_*sen 242

正确答案是,当你放置一个新的配置文件时,supervisor 要求你重新读取更新。重新启动不是答案,因为这会影响其他服务。尝试:

supervisorctl reread
supervisorctl update
Run Code Online (Sandbox Code Playgroud)

  • 这应该是正确答案。仅靠“主管重读”是不够的。 (14认同)
  • 仅“supervisorctl reread”是不够的,但是“supervisorctl update”还不够吗?根据文档“更新”进行重读,然后重新启动其配置被重读修改的任何程序。 (10认同)
  • +1 这是一个更好的答案,因为它不依赖于流程管理器。 (3认同)

小智 39

我有同样的问题,一个

sudo service supervisord reload
Run Code Online (Sandbox Code Playgroud)

成功了,虽然我不知道这是否是您问题的答案。

  • supervisorctl reread 也可以解决这个问题,而无需重新启动服务。 (7认同)
  • 前段时间我停下来然后开始主管,它起作用了。不知道重新加载是否有效(因为我的心脏重启无效)但我想它可以 (2认同)
  • 为我工作,尽管该服务不起作用,所以我只是运行 `ps aux | grep Supervisor`然后`sudo Kill -HUP pid` (2认同)
  • 这很危险,因为它会重新启动整个主管守护程序。 (2认同)

小智 21

确保您的主管 conf 文件以 .conf 结尾

我花了一段时间才弄明白。希望它可以帮助下一个人。


小智 15

重新加载主主管进程可能会起作用,但如果主管监视多个进程,则会产生意想不到的副作用。

执行此操作的正确方法是发出supervisorctl reread使其扫描配置文件以进行任何更改的问题:

root@debian:~# supervisorctl reread
gunicorn: changed
Run Code Online (Sandbox Code Playgroud)

然后,只需重新加载该应用程序:

root@debian:~# supervisorctl restart gunicorn
gunicorn: stopped
gunicorn: started
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说还不够。`supervisorctl update` 是必要的。 (5认同)

Con*_*ean 6

我有一个类似的问题 ( myapp_live: ERROR (no such process)),这是因为我的流程定义是

[program: myapp_live]
Run Code Online (Sandbox Code Playgroud)

应该是什么时候

[program:myapp_live]
Run Code Online (Sandbox Code Playgroud)

虽然这并没有解决被问到的问题,但我被搜索引导到这里,寻找解决我的问题的方法,所以希望其他人也能在这里找到它。


小智 5

我在使用 Ubuntu Server 12.10 的 3.0a8-1.1 版主管包时遇到了这个问题。我最终通过阅读内置帮助解决了这个问题:

$ sudo supervisorctl help restart
restart <name>          Restart a process
restart <gname>:*       Restart all processes in a group
restart <name> <name>   Restart multiple processes or groups
restart all             Restart all processes
Run Code Online (Sandbox Code Playgroud)

特别是您想使用以下语法:

sudo supervisorctl restart myapp_live:*
Run Code Online (Sandbox Code Playgroud)

正如http://supervisord.org/configuration.html#programx-section 上的文档所述——“[program:x] 部分实际上代表了主管的“同构进程组”(从 3.0 开始)。所以这个问题可能是在 3.0 版本中首次出现的。

PS:我是新来的主管;我使用https://github.com/bdarnell/tornado-production-skeleton/blob/8ad055457646929c0e8f48aaf20d98f054b1787b/production/chat.supervisor作为最小配置的示例。