我在跑主管在我的 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
请按照以下步骤解决问题 -
- 从 /tmp 删除 .sock 文件
- 运行“supervisord”命令。这将重新创建 sock 文件。
- 运行“supervisorctl -i”来检查服务的状态。
希望这对你有帮助!
答案3
在这个问题上挣扎了很久之后,每个人都告诉我只使用enable
或者restart
哪个都没用。我终于找到了解决办法:
- 首先确认您这里有主要的supervisor.conf 文件:
/etc/supervisor/supervisor.conf
.conf
如果你和我的情况一样,那么这里也有一个项目特定的文件:/etc/supervisor/conf.d/project.conf
不知何故,supervisorctl
工作正常,但奇怪的是,这样做service supervisor restart
会破坏一切,并且你会收到 OP 的错误。
解决方案是:
- 重命名
project.conf
为project.conf.tmp
- 然后
service supervisor restart
(supervisorctl
再次起作用之后) - 你将项目配置文件重命名为
project.conf
supervisorctl reread
,,supervisorctl update
supervisorctl 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
。