Logging

如何配置 runit 日誌記錄

  • March 3, 2021

我在使用 runit 設置日誌記錄服務時遇到問題。以下是我根據 runit 的文件和我在網際網路上找到的其他資源創建的文件和腳本的簡要概述:

我在debian下使用runit,因此:

/etc/service/test是指向 的符號連結/etc/sv/test

/etc/sv/test

$ ls /etc/sv/test
finish  log  run

並且/etc/sv/test/log

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

run腳本:

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

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

while true; do
   date
   sleep 3
done

finish腳本:

$ 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某種原因無法啟動日誌記錄腳本!

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

更新 3:

如果要停止日誌記錄腳本,則必鬚髮出:

$ sv d test/log

您的問題中有許多與問題無關的問題需要解決(咳嗽pid 文件咳嗽),但讓我們正確解決問題。


首先,日誌記錄是可選的。沒有硬性要求您有一個用於服務定義的記錄器,儘管在大多數情況下您會想要一個。

其次,因為記錄器實際上從屬於您的服務,所以./log保存記錄所需的設置是有意義的。

第三,當您關閉服務時,記錄器會因為某種原因而繼續執行 - 它會在那裡擷取剩餘的數據,直到服務終止。這樣做是為了防止日誌數據失去,不僅是在服務關閉時,而且在服務崩潰時也是如此。 即使服務關閉,記錄器仍然執行是正常的。 啟動服務只會將新服務實例重新連接到現有記錄器。

第四,您是對的,您可以通過使用sv命令顯式命名它來停止記錄器。這與現有的daemontools範式是一致的。

第五,除非您有異常需要註冊 svlogd 程序的失敗(極不可能),否則您無需擔心殺死它等。簡單地發出信號使其關閉將導致runsv監督程序終止它,沒有 PID 或kill需要的命令。

如果您還有其他問題,我建議您聯繫監督郵件列表,它噪音低,並且有很多知識淵博的人來回答您的問題。只讀鏡像也可以在mail-archive.org上找到。

引用自:https://serverfault.com/questions/626436