Supervisor找不到socket.py文件。

41

我正在尝试为Laravel设置队列监听器,但无法正确使用Supervisor。 运行supervisorctl reload时出现以下错误:

error: <class 'socket.error'>, [Errno 2] No such file or directory: file: /usr/lib/python2.7/socket.py line: 228

该文件确实存在。 如果尝试运行sudo supervisorctl,则会收到此消息unix:///var/run/supervisor.sock no such file

我已尝试重新安装Supervisor,但仍然无法解决问题。 不确定该怎么办。

我正在运行Laravel Homestead(Ubuntu 16.04)。

service supervisor status的结果为:
vagrant@homestead:~/Code$ sudo service supervisor status ● supervisor.service - Unix的Supervisor进程控制系统 Loaded: loaded (/lib/systemd/system/supervisor.service; enabled; vendor preset: enabled) Active: activating (auto-restart) (Result: exit-code) since Thu 2016-12-22 11:06:21 EST; 41s ago Docs: http://supervisord.org Process: 23154 ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown (code=exited, status=0/SUCCESS) Process: 23149 ExecStart=/usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf (code=exited, status=2) Main PID: 23149 (code=exited, status=2)


听起来像是安装了supervisor但没有运行。尝试service supervisor --status并告诉我们它显示什么(可能是“services”而不是“service”——我没有记住所有的Linux命令)。 - stevendesu
我已经在我的问题中添加了 service supervisor status 的结果。 - Michael
1
首先使用 sudo service supervisor start 启动 Supervisor,然后使用 sudo supervisorctl 命令。 - baikho
16个回答

1

请检查 supervisord.conf 文件。

查找以下内容:

[unix_http_server]
file=/path/to/supervisor.sock/file   ; (the path to the socket file)   
chmod=0700                           ; sockef file mode(default 0700)

请到上述路径检查文件是否存在。 如果存在,请尝试重新安装supervisor。
如果不存在,则使用命令行或文件资源管理器GUI搜索supervisor.sock文件。
通过使用cp命令或GUI将在上一步找到的文件复制到[unix_http_server]中指定的位置。
对于我来说,supervisor.sock位于/run文件夹中。

3
我的 supervisor.sock 文件完全丢失了。重新安装 supervisor 修复了这个问题。 - Erik Kalkoken

0
我遇到了这个问题,因为我们使用supervisorctl来管理gunicorn。我的问题根本不是与supervisor有关(它可以很好地处理其他进程),也不是与python sock.py文件有关(文件在那里,权限正确),而是与gunicorn配置文件/etc/supervisor/conf.d/gunicorn.conf有关。这个配置文件由一个带环境变量的源控制模板管理,当我们在服务器上更新模板时,模板变量从未被实际数据替换。例如,gunicorn.conf文件中的某些内容读取user={{ user }},而不是user=gunicorn。当supervisor在运行supervisorctl start gunicorn时尝试解析此配置时,它会崩溃并出现此套接字错误。修复gunicorn.conf文件解决了supervisor的问题。

0

答案来源:http://supervisord.org/installing.html

  1. 运行命令:echo_supervisord_conf
  2. 一旦你在终端看到文件被回显,重新调用命令:echo_supervisord_conf > /etc/supervisord.conf。如果你没有 root 访问权限,则此方法无法使用。
  3. 如果你没有 root 访问权限,或者你不想将 supervisord.conf 文件放在 /etc/supervisord.conf 中,你可以将其放置在当前目录中(echo_supervisord_conf > supervisord.conf),并使用 -c 标志启动 supervisord 以指定配置文件位置。

现在应该已经解决了错误。


0
我采取了以下措施来解决CentOS Linux 7上的问题。
sudo systemctl status supervisord.service

通过上述命令,我意识到程序处于活动状态。
sudo systemctl start supervisord.service

现在我使用上述命令启动服务,一切都正常工作了。


0

你可以尝试一下

sudo touch /var/run/supervisor.sock
sudo chmod 777 /var/run/supervisor.sock

0
我的问题最终是由于在一个 conf.d 文件中指定了无效的目录(在我的情况下,是 Laravel 框架中的 Horizon 包)所导致的。
[program:horizon]
process_name=%(program_name)s
command=php /var/www/projects/myInvalidPath/artisan horizon
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/www/projects/myInvalidPath/storage/logs/horizon.log
stopwaitsecs=3600

这个无效的配置会抛出错误:error: <class 'FileNotFoundError'>, [Errno 2] No such file or directory: file: /usr/lib/python3/dist-packages/supervisor/xmlrpc.py line: 560 有趣的是,如果日志文件无效,会报告一个更有用的错误,这让我发现了以下问题: ERROR: CANT_REREAD: 在路径 /var/www/projects/myInvalidPath/storage/logs/horizon.log 中命名的目录在 'program:horizon' 部分中不存在(文件:'/etc/supervisor/conf.d/horizon.conf')

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