我试图弄清楚为什么 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