runit-无法打开 supervise/ok:文件不存在

runit-无法打开 supervise/ok:文件不存在

我试图弄清楚为什么 runit 无法启动或无法提供托管应用程序的状态。在 Ubuntu 12.04 上运行。

我创建了 /service、/etc/sv/myapp(其中包含运行脚本、配置文件、日志文件夹和运行脚本)。我创建了从 /service/ 到 /etc/sv/myapp 的符号链接

当我跑步时

sudo sv s /service/*

我收到以下错误消息:

warning: /service/myapp: unable to open supervice/ok: file does not exist

我通过谷歌搜索发现,重新启动 svscan 服务可能会解决这个问题,但终止它并运行 svscanboot 却没有什么效果。

有什么建议吗?我是不是漏掉了什么步骤?

答案1

就我而言,我删除了进程号停止服务后从服务配置中:

# stops the service 
sv down serviceName

# deletes the 'pid' and 'lock' files
find -L /etc/service/serviceName -type f \( -name "pid" -o -name "lock" \) -delete

# starts the service
sv up serviceName

# verify service status
sv s serviceName

我花了一段时间才找到解决方案,所以我希望它能对其他人有所帮助。

答案2

问题是,至少在 Ubuntu 12.04 上,runit 服务符号链接应该放在 /etc/service 下,而不是 /service 下,正如Runit 上的 Arch 指南

答案3

如果你运行的是 ubuntu 18.04 或更高版本并收到以下错误

无法打开 superise/ok:文件不存在

或者如果 runsvdir 没有出现在“grep”输出中,那么请runit-systemd通过运行以下命令进行打包

sudo apt install runit-systemd

对于 ubuntu 18.04,上述所有答案都对我不起作用。然后我从另一个 askubuntu 找到了这个解决方案问题

我希望这有帮助

答案4

当服务符号链接到通过 LVM 挂载在不同文件系统上的目录时,Runit 也会出现启动困难。例如,

$ readlink -f /etc/service/my-service
/opt/my-service

$ mount
...
/dev/mapper/lvm--local-opt on /opt type ext4 (...)

$ sv once my-service
warning: my-service: unable to open supervise/ok: file does not exist

可能的解决方案:

  • 从 LVM 卸载文件系统
    umount /opt; lvremove /dev/mapper/lvm--local-opt
  • 将 runit 服务移至更好的位置
    update-service --remove /opt/my-service; mv /opt/my-service /etc/sv; update-service --add /etc/sv/my-service

相关内容