你如何配置 runit 日志记录

oz1*_*123 8 logging runit

我在使用 runit 设置带有日志记录的服务时遇到问题。以下是我根据 runit 的文档和我在互联网上找到的其他资源创建的文件和脚本的简要概述:

我在 debian 下使用 runit,因此:

/etc/service/test是到 的符号链接/etc/sv/test

/etc/sv/test

$ ls /etc/sv/test
finish  log  run
Run Code Online (Sandbox Code Playgroud)

并且/etc/sv/test/log

$ ls /etc/sv/test/log
config  run
Run Code Online (Sandbox Code Playgroud)

run脚本:

$ cat /etc/sv/test/run
#!/bin/sh

touch /tmp/pid
echo $$ > /tmp/pid

while true; do
    date
    sleep 3
done
Run Code Online (Sandbox Code Playgroud)

finish脚本:

$ cat /etc/sv/test/finish
#!/bin/sh

kill `cat /tmp/pid`
Run Code Online (Sandbox Code Playgroud)

log脚本:

cat  /etc/sv/test/log/run
#!/bin/sh
exec svlogd -t /var/log/test
Run Code Online (Sandbox Code Playgroud)

目录/var/log/test存在,服务运行。

$ sv s test
run: test: (pid 11547) 536s; down: log: 1s, normally up, want up
Run Code Online (Sandbox Code Playgroud)

但是日志目录是空的......我错过了什么?所有的日志信息在哪里?

更新:

我还确保所有脚本都是可执行的。

更新2:

似乎sv由于某种原因无法启动日志记录脚本!

$ sv s test
run: test: (pid 14612) 5s; down: log: 0s, normally up, want up
Run Code Online (Sandbox Code Playgroud)

更新3:

如果要停止日志记录脚本,则必须发出:

$ sv d test/log
Run Code Online (Sandbox Code Playgroud)

oz1*_*123 5

因此,经过一番尝试和错误后,我找到了解决方案。

以下几点是需要注意的:

  1. 配置文件:请注意,它非常违反直觉。如果您在 下监视了服务/etc/sv/test,并且在下有一个日志记录目录,那么/etc/sv/test/log您希望该目录config位于/etc/sv/test/log/config!但请注意,该文件是从您运行的位置读取的svlogd。这意味着:如果您的日志脚本在/var/log/test( 的最后一个参数svlogd)中运行,那么这就是配置文件的预期位置。var/log/test/config所以在List item中写下你的配置
  2. 重新加载配置:如果更改配置文件,可以使用以下命令停止和启动脚本:
$ sv down test/log
$ sv start test/log
ok: run: test/log: (pid 21190) 0s
Run Code Online (Sandbox Code Playgroud)


Ave*_*yne 5

在您的问题中有许多与问题无关的事情要解决(咳嗽pid 文件),但让我们正确地解决这个问题。


首先,日志记录是可选的。虽然在大多数情况下您需要一个记录器,但没有硬性要求为您的服务定义提供记录器。

其次,因为记录器实际上从属于您的服务,所以./log保存记录所需的设置是有意义的。

第三,当您关闭服务时,记录器会出于某种原因继续运行 - 它会在服务终止之前捕获剩余数据。这样做是为了防止日志数据丢失,不仅在服务关闭时,而且在服务崩溃时也是如此。 即使服务关闭,记录器仍然运行是正常的。 启动服务只会将新服务实例重新连接到现有记录器。

第四,你是对的,你可以通过使用sv命令显式命名来停止记录器。这符合现有的daemontools范式。

第五,除非你有注册svlogd程序失败的异常需求(极不可能),否则你不必担心杀死它等。简单地向它发出信号将导致runsv监督进程终止它,没有PID或kill需要的命令。

如果您还有其他问题,我建议您联系监督邮件列表,它噪音低,有很多知识渊博的人来回答您的问题。也可以在mail-archive.org上找到只读镜像。