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

这是supervisorctl所说的:

# supervisorctl start myapp_live
myapp_live: ERROR (no such process)


我在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


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

[include]
files = /etc/supervisor/conf.d/*.conf


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

# 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


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

评论

我正为同样的问题挠头。我重新读取或更新时未加载我的配置文件。原来,我已将配置文件另存为foo.conf.py而不是foo.conf,因此未被识别。

#1 楼

我遇到了同样的问题,一个问题,虽然我不知道这是否是您的问题的答案。

评论


我停下来,然后在一段时间前开始主管,它奏效了。不知道重新加载是否可以正常工作(因为我无法重新启动心脏),但我想可以

– grucha
2010-12-21 8:41

我也这样做了,并且奏效了。我想知道为什么在手动停止和启动时/etc/init.d/supervisor重新启动不起作用。

– Kirill
2012年2月29日在12:33

为我工作,尽管该服务无法正常工作,所以我只运行了ps aux | grep主管,然后sudo kill -HUP pid

–Wayne Werner
2012年8月13日在3:04

这很危险,因为它将重新启动整个Supervisor守护程序。

– Mark Theunissen
13年2月17日在20:04

超级用户重读可以解决此问题,而无需重新启动服务。

–乔纳森·柳蒂(Jonathan Liuti)
13年8月27日在13:20

#2 楼

正确的答案是,主管在放置新的配置文件时要求您重新阅读和更新。重新启动不是解决办法,因为这会影响其他服务。尝试:

supervisorctl reread
supervisorctl update


评论


这应该是正确的答案。仅仅“主管重读”是不够的。

– Miebster
13-10-21在16:04

+1这是一个更好的答案,因为它不依赖于流程管理器。

– tidwall
14年7月30日在15:29

仅“ supervisorctl重读”是不够的,但是“ supervisorctl更新”是否足够?根据文档“更新”进行重新读取,然后重新启动其配置已被重新读取修改的所有程序。

– BlueBomber
2014年9月8日在22:03



它对我有用。我已经完成重启。

–user1012513
19年8月22日在11:34



@BlueBomber是的,但是重读将告诉您首先更改了什么,因此您不会无意间意外加载其他内容。

– DylanYoung
20年1月14日在17:42

#3 楼

确保您的主管conf文件以.conf结尾。花点时间让我弄清楚。希望它可以帮助下一个人。

评论


在同一问题上浪费了一个小时-简直不敢这么简单。

–赞恩
16年5月5日在17:22



感谢您列出此答案。对于我的一生,我无法弄清楚这一点。

–菲利普·马丁(Phillip Martin)
16年6月2日在14:54

#4 楼

重新加载主主管进程可能会起作用,但是如果主管要监视多个进程,则会产生意外的副作用。配置文件进行任何更改:

root@debian:~# supervisorctl reread
gunicorn: changed


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

root@debian:~# supervisorctl restart gunicorn
gunicorn: stopped
gunicorn: started


评论


如果您只想读取已更改/新的配置文件,并且不影响其余正在运行的进程,则这是最佳解决方案。 Supervisorctl将显示新应用程序可用。通过发出supervisorctl更新将其添加到(可重新启动的)过程中。另请参阅马克的答案serverfault.com/a/479754/125887

– Sjaak Trekhaak
2013年6月13日7:23



这对我来说还不够。需要更新supervisorctl。

–雅罗斯拉夫·尼基琴科(Yaroslav Nikitenko)
16年1月22日在15:39

#5 楼

我有一个类似的问题(myapp_live: ERROR (no such process)),这是因为我的流程定义是
>
虽然这不能解决所提出的问题,但我一直受到“正在寻找我的问题的解决方案”的搜索的领导,希望其他人也能在这里找到它。

评论


同样在这里!在遵循文档之后,我仅将其保留为[program],但将其设为[program:redis]使其对我有用。事情有时会变得很奇怪!

–ankush981
16年7月16日在7:08

#6 楼

我使用来自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


尤其要使用以下语法: br />
正如文档在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作为最小配置外观的示例。

#7 楼

我发现此解决方案最方便:使用which supervisorctl(其中:visudo-需要重新启动应用程序的用户,myappuser-应用程序名称)保存sudoers文件:
myappuser  ALL=(ALL) NOPASSWD: /usr/bin/supervisorctl restart myapp


您不受发行版启动脚本的束缚,并且为用户重新启动gunicorn应用程序提供了非常狭窄的特权。另外,您无需关心pid。该命令不会要求输入密码,因此适用于自动部署bash / fabric脚本。另一方面-您必须知道,如果supervisorctl易受某些导致代码执行的错误的影响,则恶意用户可以使用此sudo特权以root身份运行代码(但据我所知,对于supervisor和找到这样的漏洞是一件大事。

#8 楼

在此处阅读supervisorctl.py的代码:
https://github.com/Supervisor/supervisor/blob/master/supervisor/supervisorctl.py

您可以看到supervisorctl更新了(功能do_update)完全按照supervisorctl reread(函数do_reread)的方式调用reloadConfig()。

因此,我认为如果您在更新后调用update,则不必调用reread。

来自至少从2009年7月以来,git blame的输出就一直这样。

#9 楼

这是清单:



新的配置文件应根据/etc/supervisord.conf中配置的包含模式来命名:

[include]
files=supervisord.d/*.ini


如我所见,将包括spam.ini,但不包括spam.conf。


如果通过复制创建新文件一个旧的,请确保实际更改[program:]行。因为如果您像在同一个程序中拥有两个文件一样愚蠢,则supervisorctl reread会给您留下这个无可救药的错误消息作为惩罚:检测到文件后,supervisorctl reread应该显示以下内容:

No config updates to processes


然后,supervisorctl update spam应该同时启动并使其出现在supervisorctl status中。


#10 楼

我发现init.d脚本在各种不同的Ubuntu / Debian版本上都不可靠。方法是这样的:

sudo supervisorctl reload


评论


尽管在许多情况下都可以使用,但这不是正确的方法。 @ burhan-khalid答案是正确的,并提供了相应的解释。

–格兰林
13年4月26日在18:26

#11 楼

我已经用yum install安装了supervisrod,后者安装了v2。*版本的超级用户。 Supervisor仅支持版本3的外部包含。必须使用easy_install来安装supervisor v3。

评论


这也是我的问题,可能会在所有Centos 6.5或更低版本的安装中发生。

– bearrito
2015年2月18日,0:42

#12 楼

请小心符号链接,并在Supervisor上包含文件。
这将允许对/home/myapp/live/deploy/supervisord_live.ini具有w特权的任何人更改ini文件并启动任何恶意代码。
ini文件应位于您的主管的conf目录中或在其下的任何子目录中。