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

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

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

我做了什么:

testrun1)在中创建一个目录/etc/sv

run2)在中创建脚本/etc/sv/testrun/run,脚本内容:

#! /bin/bash
exec /root/FP/annotate-output python /root/FP/test.py | logger -t svtest

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

4)我运行sv start testrun(或sv run testrunsv restart testrun),它们都出现相同的错误消息:

fail: sv: unable to change to service directory: file does not exist

知道我做错了什么吗?我是 runit 的新手,我的所有操作均基于此处找到的信息: http://smarden.org/runit/

答案1

您的服务设置不正确。它之所以能正常工作,是因为您直接从服务调用了它定义而不是来自实际的服务控制

当 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

这会:

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

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

答案2

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

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

相关内容