你如何configurationrunit日志

使用运行正确logging设置服务时遇到问题。 以下是我根据runit的文档和我在internt中find的其他资源创build的文件和脚本的简要概述:

我在debian下使用runit,因此:

/etc/service/test – >链接到/etc/sv/test

在/ etc / sv / test下:

 $ ls /etc/sv/test finish log run $ ls /etc/sv/test/log config run 

脚本runfinish非常简单:

 root@data1:/etc/sv/test $ cat /etc/sv/test/run #!/bin/sh touch /tmp/pid echo $$ > /tmp/pid while true; do date sleep 3 done root@data1:/etc/sv/test $ cat /etc/sv/test/finish #!/bin/sh kill `cat /tmp/pid` 

而且log脚本也很简单:

cat / etc / sv / test / log / run

 #!/bin/sh exec svlogd -t /var/log/test 

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

 $ sv s test run: test: (pid 11547) 536s; down: log: 1s, normally up, want up 

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

更新:

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

更新2:

看起来sv由于某种原因无法启动logging脚本!

 $ sv s test run: test: (pid 14612) 5s; down: log: 0s, normally up, want up 

更新3:

如果你想停止日志脚本,你必须发出:

 $ sv d test/log 

在你的问题中有很多东西要解决的问题( 咳嗽 pid文件咳嗽 ),但让我们解决问题。


首先 ,日志是可选的。 没有硬性的要求,你有你的服务定义logging器,虽然在大多数情况下,你会想要一个。

其次 ,因为logging器实际上是服务于您的服务的,所以./loglogging所需的设置是有意义的。

第三 ,当您closures服务时,logging器仍然运行有一个原因 – 在那里捕获剩余的数据,直到服务终止。 这样做是为了防止logging数据的丢失,不仅在服务closures时,而且在服务应该崩溃的情况下。 logging器即使在服务中断时仍然运行是正常的。 启动服务将简单地将新的服务实例重新连接到现有的logging器。

第四 ,你是正确的,你可以用sv命令明确命名它来停止logging器。 这符合现有的daemontools范式。

第五 ,除非你有非常不寻常的注册svlogd程序失败的需求(极不可能),你不需要担心杀死它等等。只要发信号给它下去就会导致监督进程终止它,没有PIDs或者kill所需的命令。

如果您还有其他问题,我build议您联系监督邮件列表 ,该列表是低噪音的,并且有很多有知识的人来回答您的问题。 一个只读的镜像也可以在mail-archive.orgfind。

所以,经过一些试验和错误,我find了一个解决scheme。

以下几点很重要:

  1. configuration文件 :注意,这是非常直观的。 如果您在/etc/sv/test下监视了服务,并且在/etc/sv/test/log下有一个日志logging目录,则可以预料到config将位于/etc/sv/test/log/config ! 但请注意,该文件是从您运行svlogd地方读取的。 这意味着:如果你的日志脚本运行在/var/log/testsvlogd的最后一个参数),这是configuration文件的预期位置。 所以把你的configuration写在var/log/test/config列表项中
  2. 重新加载configuration :如果更改configuration文件,可以通过以下方式停止并启动脚本:
 $ sv down test/log $ sv start test/log ok: run: test/log: (pid 21190) 0s