我正在使用 runit 运行程序在启动时运行。我希望将 runit 运行的程序的所有输出记录到文件中。
我看过svlogd但我不知道如何让它运行。
答案1
我不知道如何让它运行。
在 daemontools 系列世界中,日志服务与其他服务一样。因此,您运行svlogd
一个run
程序就像使用一个run
程序运行“主”服务一样。
“日志”服务的特殊之处仅在于:
- “log”服务目录使用来自“main”服务目录(或其直接子目录)的符号链接来定位。
- 一些(但不是全部)daemontools 系列工具集紧密绑定“日志”和“主”服务,并将两者作为一个单元进行操作。在某种程度上,runit 就是这种情况。
否则,它们就像其他一切一样。
因此,创建一个“日志”服务来运行svlogd
,就像创建任何其他服务一样,将其放在相对于“主”服务的正确位置,然后启动。
进一步阅读
- 乔纳森·德博因·波拉德 (2015)。“记录”。 守护进程工具家族。常见答案。
- 格里特·帕普.“如何创建带有附加日志服务的新服务目录?”。 runit 常见问题解答。
- 丹尼尔·J·伯恩斯坦。 “如何创建带有日志的服务目录?”。 daemontools 常见问题解答。
答案2
您要做的第一件事是找出 runit 文件在系统上的位置。通常是/etc/runit/
.在那里,您将找到一个名为 的目录sv
,其中为每个服务创建一个目录。
假设您想要创建一个名为 的新服务food
。您将创建一个名为food
in的目录/etc/runit/sv/
。
# mkdir /etc/runit/sv/food
在 中创建一个run
脚本/etc/runit/sv/food
。假设您的服务程序是可执行文件,位于/opt/bin/foo
。在这种情况下,你的run
脚本将是这样的。
#!/bin/sh
exec /opt/bin/foo 2>&1
对于日志记录,您应该在/etc/runit/sv/food
名为 的目录中创建另一个目录log
。其中还有另一个run
脚本。
#!/bin/sh
exec svlogd -tt <logs-directory>
确保<logs-directory>
出口。并且不要忘记使这两个run
脚本都可执行。
# chmod +x /etc/runit/sv/food/run
# chmod +x /etc/runit/sv/food/log/run
food
在里面创建一个目录的符号链接/etc/runit/runsvdir/default
# ln -s /etc/runit/sv/food /etc/runit/runsvdir/default/
要手动启动/停止您的服务,只需运行:
# sv start food
# sv stop food
抢夺这一点快速入门指南更多细节。
请注意,与指南不同,我chpst
在示例中没有使用。在这种情况下,food
服务将作为 运行root
。chpst
如果您希望服务作为特定用户运行,请按照指南的建议使用。