在Ubuntu中设置nginx和supervisor

50
我正在使用django-gunicorn-nginx的设置,遵循这篇教程http://ijcdigital.com/blog/django-gunicorn-and-nginx-setup/。在配置nginx之前,一切正常。然后我安装了supervisor,并进行了配置,然后重启服务器并检查,结果显示502坏网关错误。我正在使用Ubuntu 12.04 LTS。 /etc/supervisor/conf.d/qlimp.conf
[program: qlimp]
directory = /home/nirmal/project/qlimp/qlimp.sh
user = nirmal
command = /home/nirmal/project/qlimp/qlimp.sh
stdout_logfile = /path/to/supervisor/log/file/logfile.log
stderr_logfile = /path/to/supervisor/log/file/error-logfile.log

然后我重新启动了supervisor并运行了这个命令 $ supervisorctl start qlimp,但我得到了这个错误

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

我的Supervisor设置有问题吗?

谢谢!

12个回答

66

没有找到套接字文件,可能意味着supervisor没有运行。它没有运行的原因可能是你的qlimp.conf文件中有某种错误。如果你运行

sudo service supervisor start

您可以看到这是否是真的。如果监管者已经在运行,它会说出来。如果它捕获了一个错误,通常会给出比supervisorctl更有帮助的错误消息。


1
我遇到了同样的错误,你的命令修复了它。如何调试 qlimp.conf 文件中的错误? - Pratik Poddar
当我运行这个程序时,出现了IOError: [Errno 13] Permission denied: '/var/log/supervisor/supervisord.log'的错误提示。 - nu everest
1
原来我在[supervisord]下指定了一个非root用户。 - nu everest
嗨@nueverest,你怎么解决权限被拒绝的问题了吗? - sulaiman sudirman
1
@sulaiman请确保您查看conf文件中的[supervisord]部分,指定的用户必须具有root访问权限。 - nu everest

27

我遇到了和你一样的问题,经过多次尝试,终于找到了解决方法:

  1. 首先删除apt-get安装的supervisor版本:

      sudo apt-get remove supervisor
    
  2. 结束后端监督进程:

     sudo ps -ef | grep supervisor
    
  3. 接着获取最新版本(apt-get版本为3.0a8):

  4. sudo easy_install(pip install) supervisor==3.0b2 
    
  5. 打印配置文件(需要 root 权限):

  6. echo_supervisord_conf > /etc/supervisord.conf
    
  7. 5. 启动supervisord:
  8.    sudo supervisord
    

    6.进入supervisorctl:

       sudo supervisorctl
    

    任何事情都已完成!玩得开心!


1
当我运行 sudo echo_supervisord_conf > /etc/supervisord.conf 时,我会得到 Permission Denied 的错误提示。 - nu everest
@nu everest所以你必须以超级管理员身份运行。 - Scen
所以你必须以超级管理员身份运行。仍然不起作用,还有其他建议吗?@Scen - Ferid Š. Sejdović

18

试一试

cd /etc/supervisor
sudo supervisord
sudo supervisorctl restart all

这对我有用,因为supervisor没有作为服务安装在我的服务器上。在重新启动后,我需要手动使用supervisord启动它,然后才能使用supervisorctl。谢谢Anil。 - OskarD90
对我来说有效,我已经在docker内运行了它,但是套接字文件似乎在启动时没有被创建,尽管supervisord在ps列表中已经启动。然而,“sudo supervisord”似乎可以让它创建,尽管它会抛出一个警告消息,提示我正在以root身份运行它。 - tristanbailey

12

您确定已安装并运行了supervisord吗?是否在/var/run/supervisor.sock位置存在套接字文件?

该错误表示supervisorctl,即控制CLI无法连接UNIX套接字以与supervisord守护程序通信。

您还可以检查/etc/supervisor/supervisord.conf,查看unix_http_serversupervisorctl部分的值是否匹配。

请注意,这是Ubuntu级别的问题,而不是Python、Django或nginx的问题,因此这个问题可能属于ServerFault。


没有在 /var/run 目录下找到 supervisor.sock 文件,为什么会这样呢? - rnk
2
如果在 /etc/supervisor/supervisord.conf 配置文件的 unix_http_server 部分中,有一个文件指向 /var/run/supervisor.sock,那么说明 supervisord 没有运行或安装。请尝试运行 sudo /etc/init.d/supervisor start 命令来启动它。 - Martijn Pieters
我尝试运行 sudo /etc/init.d/supervisor start,但是我在 path/to 找不到文件。然后我改成了 /etc/supervisor/log/,现在我有了 supervisor.sock 文件,重启了服务器并检查了一下,但仍然出现 502 bad gateway 错误。 - rnk
现在,您可能遇到了nginx配置问题或者您的上游服务未运行。请尝试直接访问localhost:8001。 - Martijn Pieters

10

在Ubuntu 16+上,这似乎是由于切换到systemd引起的,这个解决方法可能适用于新服务器:

 # Make sure Supervisor comes up after a reboot.
 $ sudo systemctl enable supervisor

 # Bring Supervisor up right now.
 $ sudo systemctl start supervisor

然后检查一下您作为监管者的iconic.conf [我的示例]的状态

$ sudo supervisorctl status iconic

这里输入图片描述

PS:确保gunicorn在运行时没有任何问题。


5
错误可能是因为您没有特权。 也许您可以通过以下方式修复错误:打开终端,输入 vim /etc/supervisord.conf 编辑文件,搜索行。
[unix_http_server]
;file=/tmp/supervisor.sock   ; (the path to the socket file)
;chmod=0700                  ; socket file mode (default 0700)

删除字符串开头的分号;,并且删除;file=/tmp/supervisor.sock;chmod=0700,然后重新启动supervisord。我建议您这样做。


3
请确保在/etc/supervisor.conf中存在以下两个部分:
[unix_http_server]
file=/tmp/supervisor.sock ; path to your socket file

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

1
套接字文件的路径是什么? - avi

2
你可以这样做:-
sudo touch /var/run/supervisor.sock
sudo chmod 777 /var/run/supervisor.sock
sudo service supervisor restart

这肯定有用,试一下吧。


2
在我的情况下,Supervisor没有运行。为了找出问题,我运行了以下命令:
sudo systemctl status supervisor.service

问题出在我的日志指向了一个不存在的目录,所以我只需创建它即可。
希望能对您有所帮助 :)

谢谢!这对我解决了问题。实际上,supervisor.conf 没有问题,但是 conf.d 文件夹中的一个服务文件指向了一个不存在的目录。 - Daniel

0
touch /var/run/supervisor.sock
sudo supervisord -c /etc/supervisor/supervisord.conf

然后执行 supervisorctl restart all 命令

如果你想监听 supervisor 端口

ps -ef | grep supervisord

如果你想结束进程

kill -s SIGTERM 2503  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接