当我使用 Supervisord 时,没有创建“/var/run/supervisor.sock”文件

当我使用 Supervisord 时,没有创建“/var/run/supervisor.sock”文件

我在跑主管在我的 Ubuntu 14.04 服务器上,一切正常。我使用 git push 进行部署,部署后,我还需要重新启动我的应用程序服务器(gunicorn) 我可以使用 来完成supervisorctl

在我的 中supervisord.conf,gunicorn 定义如下:

[program:gunicorn]
command=/home/imb/imb/venv/bin/gunicorn --worker-class eventlet -b 127.0.0.1:5000 -w 1 app:app
directory=/home/imb/imb
autostart=true
autorestart=true
stdout_logfile=/tmp/gunicorn.log
redirect_stderr=true
stopsignal=QUIT

我启用了supervisorctl这样的功能:

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL  for a unix socket

我开始使用主管:

sudo supervisord -c /home/imb/imb/supervisord.conf

据我所知,我现在应该能够使用命令重新启动 gunicorn supervisorctl restart gunicorn,但是当我这样做时,我得到了

$ supervisorctl restart gunicorn
unix:///var/run/supervisor.sock no such file

我检查了一下,该文件/var/run/supervisor.sock确实不存在,尽管我确信 Supervisor 确实正在运行:

$ ps -A | grep supervisor
27211 ?        00:00:00 supervisord

有人知道为什么/var/run/supervisor.sock文件没有创建,即使主管显然正在运行?欢迎提供所有提示!

答案1

好吧,经过进一步的捣鼓之后,我发现了我做错的事情。

事实证明supervisorctl下面的几行只告诉supervisorctl它可以在哪里找到套接字文件。

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock

该文件上方还有另外两行定义该文件的实际创建位置:

[unix_http_server]
file=/tmp/supervisor.sock

正如您所看到的,在 中创建了套接字文件,/tmp/同时supervisorctl尝试从 中读取它/var/run/。我将最后一行更改为file=/var/run/supervisor.sock,现在它可以很好地运行。

我希望这个答案可以帮助其他遇到同样麻烦的人。

另外,您还可以查看评论中@MariusMatutiae 提供的链接:https://stackoverflow.com/questions/10716159/nginx-and-supervisor-setup-in-ubuntu

答案2

对于拥有相同条目的用户

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock

&

[unix_http_server]
file=/tmp/supervisor.sock

请按照以下步骤解决问题 -

  1. 从 /tmp 删除 .sock 文件
  2. 运行“supervisord”命令。这将重新创建 sock 文件。
  3. 运行“supervisorctl -i”来检查服务的状态。

希望这对你有帮助!

答案3

在这个问题上挣扎了很久之后,每个人都告诉我只使用enable或者restart哪个都没用。我终于找到了解决办法:

  • 首先确认您这里有主要的supervisor.conf 文件:/etc/supervisor/supervisor.conf
  • .conf如果你和我的情况一样,那么这里也有一个项目特定的文件:/etc/supervisor/conf.d/project.conf

不知何故,supervisorctl工作正常,但奇怪的是,这样做service supervisor restart会破坏一切,并且你会收到 OP 的错误。

解决方案是:

  1. 重命名project.confproject.conf.tmp
  2. 然后service supervisor restartsupervisorctl再次起作用之后)
  3. 你将项目配置文件重命名为project.conf
  4. supervisorctl reread,,supervisorctl updatesupervisorctl restart all

答案4

我遇到了一个问题,supervisord 在 docker 容器中运行。当我想使用该supervisorctl命令时,唯一的响应是unix:///var/run/supervisor.sock no such file

我的问题的解决方案是我必须supervisorctl以 root 身份执行该命令。

sudo supervisorctl

不再unix:///var/run/supervisor.sock no such file

相关内容