Journalctl
有沒有辦法讓 journalctl 顯示“上次 foo.service 執行”的日誌?
我對查看在計時器上執行的 oneshot 服務的輸出特別感興趣。該
--unit
標誌是關閉的,但它將服務的所有執行連接在一起。我能想到的最明顯的方法是過濾 PID,但這讓我擔心 PID 重用/分叉的服務,並且獲取最後一個 PID 非常不方便。是否有一些其他標識符對應於服務的單次執行,我可以用來過濾日誌?編輯:如果這是真正的答案,我很樂意接受權威的“不”。
從
systemd
version232
開始,我們就有了呼叫 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
)