缺少主管 sock 文件

缺少主管 sock 文件

我安装了 Supervisor (v3.1.2) 来管理 ElastAlert,但是运行时supervisorctl有时会抛出此错误:

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

有时它会抛出这个错误:

unix:///tmp/supervisor.sock no such file

我会注意到它确实会带我进入提示符supervisor>,但之后的命令与上面的错误相同。该/etc/supervisor/supervisor.conf文件配置为使用/var/run,这似乎与第二个错误不一致。

我创建了一个链接/etc/supervisor.conf,因为其他帮助页面也建议这样做,但并没有什么不同。

有两件奇怪的事情,当我第一次安装 Supervisor 时,它运行良好,但重启后这个问题就开始了。另一件奇怪的事情是 ElastAlert 在重启后启动,并继续正常运行。所以虽然它可能有错误,但它正在发挥作用。这不是什么大问题,但我希望它能正常工作。

有任何想法吗?

答案1

当物理机重新启动时,就会发生这种情况。我的机器运行 Ubuntu,范围从 12.04 到 16.04。我通过重新启动 Supervisor 作为服务来解决这个问题。

sudo service supervisor stop
sudo service supervisor start 

(这比简单地使用“重启”要好得多)

显然,如果您依赖 Supervisor 为您启动其他程序而无需在每次重启后重新启动,那么这不是理想的解决方案。我目前正在研究systemd其他人建议的方法。

编辑:如果您使用的是 Ubuntu 16.04,这个答案可能会解决您的所有问题,就像它解决了我的问题一样。您应该“启用”systemd 来启动supervisord。https://unix.stackexchange.com/a/291098

答案2

以下是我的情况。假设unix:///var/run/supervisord.sock no such file输入此命令时出现错误sudo supervisorctl status

所以我的解决方案是:

  1. 打开主管配置文件sudo nano /etc/supervisor/supervisord.conf
  2. 检查supervisorctl路径的serverurl指向的行。
[supervisorctl]
serverurl=unix:///var/run/supervisord.sock ; use a unix:// URL  for a unix socket
  1. 将 serverurl 路径改为unix:///var/run/supervisor.sock。查看supervisor的差异d和主管
  2. 重启主管service supervisor restart
  3. 检查状态主管sudo service supervisor status
  4. 再次检查错误是否仍然存在,sudo supervisorctl status如果是,请尝试删除您的配置/etc/supervisor/conf.d/ ...或重新安装主管

答案3

上述解决方案对我来说不起作用,该问题更多地与添加到主管的错误 .conf 文件有关。

就我而言,问题出在其中一个主管管理的进程没有创建日志文件或没有有效路径。我诊断问题的方法是:

  1. 找到systemctl中提到的运行supervisor进程的命令,该命令为:

    systemctl -l 状态主管.服务

    此处命令与“进程”键一起出现。在我的例子中,对于 3.3.1 版的监督器,命令为/usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf

  2. 现在在终端中运行上述命令。您可能需要附加sudo。这将显示主管无法正常工作的确切原因。在我的情况下,命令的输出如下所示:

在此处输入图片描述

以上消息清楚地显示了导致错误的日志文件。

您可以创建日志文件或删除 .conf 文件并重新加载主管来修复此问题。重新加载主管的命令是:

sudo systemctl restart supervisor.service

答案4

所以我遇到了同样的问题,我使用非 root 用户使用 Supervisor。关键是你必须确保 Supervisord 服务正在运行。要做到这一点,首先找到并运行 Supervisord。因为我使用的是 pyenv,所以我运行的命令是

$ ~/.pyenv/versions/3.8.9/bin/supervisord -c ~/etc/supervisor/supervisord.conf

Supervisord.conf 是我创建的并放在那里。

现在运行supervisorctl 一切正常。

$ ~/.pyenv/versions/3.8.9/bin/supervisorctl -c ~/etc/supervisor/supervisord.conf

相关内容