我对runit很新。 我将它安装在Ubuntu主机上。
我做了什么:
1)在/etc/sv创build了一个dir testrun
2)创build脚本run在/etc/sv/testrun/run ,脚本内容为:
#! /bin/bash exec /root/FP/annotate-output python /root/FP/test.py | logger -t svtest
3)如果我直接调用/ etc / sv / testrun /运行它成功执行
4)我运行sv start testrun (或sv run testrun , sv restart testrun ),他们都结束了相同的错误消息:
fail: sv: unable to change to service directory: file does not exist
任何想法我做错了什么? 我新来runit并基于我在这里find的信息的所有行动: http ://smarden.org/runit/
您的服务设置不正确。 它工作的原因是,你直接从服务定义调用它,而不是从实际的服务控制 。
当runit的服务pipe理启动时,它希望存在一个/service目录,尽pipe一些安装(比如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
这会:
/service作为其工作目录 testrun服务,假设你已经在/etc/sv/testrun定义了它 runsvdir然后将能够改变其目录到/service ,find你的符号链接testrun ,然后启动它。 您可以使用ps fax或pstree -A来validation此过程,以查看过程树; 应该有一个runsv与你的命令附加到它。 注意:有时runvdir进程可能需要一两秒钟才能获得其头向导,所以如果您立即查看并且没有在进程树中看到它,请等待2-3秒,然后重试,并显示向上。 这似乎只发生在启动时。
看来sv控制由runit启动和监视的runit (使用runsv )。 由于我的机器上的runit实际上并没有替代sysvinit ,它不会运行,也不会监视/services/应该包含到/etc/sv/目录的符号链接。
运行runsv /etc/sv/testrun/似乎会执行预期的runit行为。