Journalctl

顯示服務重新啟動時的日誌日誌

  • March 25, 2019

自上次重新啟動服務以來,是否有規範的方法可以從 journalctl 獲取所有日誌?我想要做的是重新啟動服務並立即查看自啟動重新啟動以來的所有日誌。

我想出了:

$ unit=prometheus
$ sudo systemctl restart $unit
$ since=$(systemctl show $unit | grep StateChangeTimestamp= | awk -F= '{print $2}')
$ sudo systemctl status -n0 $unit && sudo journalctl -f -u $unit -S "$since"

這可能會起作用,但我想知道是否有更具體的說法:重新啟動並從那時起給我所有日誌。

您可以使用呼叫 id,它是服務單元特定執行的唯一標識符。

它是在 systemd v232 中引入的,因此您至少需要該版本的 systemd 才能使其工作。

獲取目前執行的服務的呼叫 id:

$ unit=prometheus
$ systemctl show -p InvocationID --value "$unit"
0e486642eb5b4caeaa5ed1c56010d5cf

然後搜尋附加了該呼叫 id 的日記條目:

$ journalctl INVOCATION_ID=0e486642eb5b4caeaa5ed1c56010d5cf + _SYSTEMD_INVOCATION_ID=0e486642eb5b4caeaa5ed1c56010d5cf

我發現您需要 INVOCATION_ID 和 _SYSTEMD_INVOCATION_ID 才能獲取所有日誌。後者由 systemd 添加用於單元本身的日誌輸出(例如,在該服務中執行的程序的標準輸出),而前者附加到 systemd 獲取的事件(例如,該單元的“開始”和“開始”消息。 )

請注意,您也不需要按單位名稱進行過濾。由於呼叫 id 是唯一的,因此通過 id 本身進行過濾就足以僅包含您感興趣的服務的日誌。

引用自:https://unix.stackexchange.com/questions/506833