Journalctl

有沒有辦法讓 journalctl 顯示“上次 foo.service 執行”的日誌?

  • July 7, 2019

我對查看在計時器上執行的 oneshot 服務的輸出特別感興趣。該--unit標誌是關閉的,但它將服務的所有執行連接在一起。我能想到的最明顯的方法是過濾 PID,但這讓我擔心 PID 重用/分叉的服務,並且獲取最後一個 PID 非常不方便。是否有一些其他標識符對應於服務的單次執行,我可以用來過濾日誌?

編輯:如果這是真正的答案,我很樂意接受權威的“不”。

systemdversion232開始,我們就有了呼叫 ID 的概念。每次執行一個單元時,它都有一個唯一的 128 位呼叫 ID。與MainPID哪個可以回收或ActiveEnterTimestamp有解決問題不同,這是獲取特定 systemd 單元呼叫的所有日誌的故障安全方法。

獲取單元的最新呼叫ID

$ systemctl show --value -p InvocationID openipmi
bd3eb84c3aa74169a3dcad2af183885b

要獲取最新呼叫的日誌,例如openipmi,是否失敗,您可以使用 one liner

$ journalctl _SYSTEMD_INVOCATION_ID=`systemctl show -p InvocationID --value openipmi.service`
-- Logs begin at Thu 2018-07-26 12:09:57 IDT, end at Mon 2019-07-08 01:32:50 IDT. --
Jun 21 13:03:13 build03.lbits openipmi[1552]:  * Starting ipmi drivers
Jun 21 13:03:13 build03.lbits openipmi[1552]:    ...fail!
Jun 21 13:03:13 build03.lbits openipmi[1552]:    ...done.

(請注意,--value自 以來可用systemd 230,早於InvocationID

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