RUNIT - 创建的第一个服务目录,“sv start testrun”不起作用

ddi*_*hev 5 runit

我对 runit 很陌生。我将它安装在 Ubuntu 主机上。

我做了什么:

1)创建的DIRtestrun/etc/sv

2)创建的脚本run/etc/sv/testrun/run,脚本内容:

#! /bin/bash
exec /root/FP/annotate-output python /root/FP/test.py | logger -t svtest
Run Code Online (Sandbox Code Playgroud)

3)如果我直接调用 /etc/sv/testrun/run 它执行成功

4)我运行sv start testrun(或sv run testrun, sv restart testrun),所有这些都以相同的错误消息结束:

fail: sv: unable to change to service directory: file does not exist
Run Code Online (Sandbox Code Playgroud)

任何想法我做错了什么?我是 runit 的新手,所有操作都基于此处找到的信息:http ://smarden.org/runit/

Ave*_*yne 6

您的服务设置不正确。它起作用的原因是您直接从服务定义而不是从实际的服务控制中调用它。

当 runit 的服务管理启动时,它希望有一个/service目录存在,尽管某些安装(如 Debian Jessie)目前/etc/service由于未知原因将其放在了该目录中。错误消息来自这个丢失的目录,它试图更改为,因此unable to change service directory消息。以 root 身份执行以下操作:

mkdir -p /etc/service
cd /
ln -s /etc/service
cd /service
ln -s /etc/sv/testrun
Run Code Online (Sandbox Code Playgroud)

这会:

  • 如果服务目录不存在,则创建它
  • 在根目录中放置一个符号链接,以便runsvdir 能够更改/service为它的工作目录
  • 创建指向您的testrun服务的链接,假设您已将其定义在/etc/sv/testrun

runsvdir然后将能够将其目录更改为/service,找到您的符号链接testrun,然后启动它。您可以通过使用ps faxpstree -A查看进程树来验证这一点;应该有一个runsv附有您的命令。 注意:有时,runsvdir 进程可能需要一两秒钟才能使其头部定向,因此如果您立即查看并没有在进程树中看到它,请等待 2-3 秒再试一次,它应该显示向上。这似乎只发生在它启动时。


ddi*_*hev 0

似乎控制由(使用)sv启动和监视的服务。由于我的计算机上的 runit 实际上并未替换,因此它不会运行,也不会监视应包含目录符号链接的 。runitrunsvsysvinit/services//etc/sv/

运行runsv /etc/sv/testrun/似乎达到了预期的 runit 行为。

  • 这是错误的答案,但我不会出于原则而投反对票。 (3认同)