Systemd

journald RuntimeMaxUse 被忽略,配額綁定到 RuntimeMaxFileSize

  • April 27, 2022

設置

在核心 4.19.62 上使用 systemd 244 (244.5+)。

我想將總日誌儲存大小設置為 100MB。Journald 設置為易失性儲存,因此日誌結束,/run/log/journal/...並且應該使用RuntimeMaxUse在****/etc/systemd/journald.conf中設置儲存配額,如下所示:

[Journal]
Storage=volatile
RuntimeMaxUse=100M
RuntimeMaxFileSize=2M

通過調整這些配置值,日誌日誌大小和配額確實會發生變化,並且 journalctl 中的啟動消息也會顯示變化。

在配置值更改之間,我停止 systemd-journald.service,刪除所有system*文件/run/log/journal/...並重新啟動服務。

注意:Storage=persistent和日誌使用時/var/log/journal/,等效的SystemMaxUse得到正確尊重。這似乎只是 volatile/RuntimeMaxUse 中的一個錯誤。

觀察到的錯誤

Runtime MaxUse (100M) 被忽略。只要 Runtime MaxFileSize小於 32M ,日誌配額就設置為64MB 。

如果 Runtime MaxFileSize設置為大於 32M,則日誌配額設置為該值的兩倍。

在這兩種情況下,執行時MaxUse似乎都被忽略了。

這是 journald/systemd 配置處理中的錯誤嗎?為什麼 Runtime MaxUse被忽略,而使用 64M 或 double Runtime MaxFileSize作為日誌配額?

我看到日誌源中有幾個地方可以將 max_use 設置為雙倍 max_size:

錯誤範例

設置了64M 的配額(RuntimeMaxUse=100MRuntimeMaxFileSize=2M不是我要求的 100M),如日誌啟動消息中所示:

systemd-journald[20312]: Runtime Journal (/run/log/journal/...) is 2.0M, max 64.0M, 62.0M free.
-- Runtime Journal (/run/log/journal/...) is currently using 2.0M.
-- Maximum allowed usage is set to 64.0M.
-- Leaving at least 1.5G free (of currently available 31.2G of disk space).
-- Enforced usage limit is thus 64.0M, of which 62.0M are still available.

使用RuntimeMaxUse=100Mand RuntimeMaxFileSize=31M,仍然使用 64M:

systemd-journald[20989]: Runtime Journal (/run/log/journal/...) is 8.0M, max 64.0M, 56.0M free.
-- Runtime Journal (/run/log/journal/...) is currently using 8.0M.
-- Maximum allowed usage is set to 64.0M.
-- Leaving at least 1.5G free (of currently available 31.2G of disk space).
-- Enforced usage limit is thus 64.0M, of which 56.0M are still available.

使用RuntimeMaxUse=100Mand RuntimeMaxFileSize=33M,配額最終為 66M:

systemd-journald[21557]: Runtime Journal (/run/log/journal/...) is 8.0M, max 66.0M, 58.0M free.
-- Runtime Journal (/run/log/journal/...) is currently using 8.0M.
-- Maximum allowed usage is set to 66.0M.
-- Leaving at least 1.5G free (of currently available 31.2G of disk space).
-- Enforced usage limit is thus 66.0M, of which 58.0M are still available.

使用RuntimeMaxUse=100M並且RuntimeMaxFileSize=200M我們突破了 100M 的限制,400M 似乎來自 200M 的 RuntimeMaxFileSize 的兩倍:

systemd-journald[25271]: Runtime Journal (/run/log/journal/...) is 8.0M, max 400.0M, 392.0M free.
-- Runtime Journal (/run/log/journal/...) is currently using 8.0M.
-- Maximum allowed usage is set to 400.0M.
-- Leaving at least 1.5G free (of currently available 31.2G of disk space).
-- Enforced usage limit is thus 400.0M, of which 392.0M are still available.

64M 來自一個我不知道的附加配置文件:/lib/systemd/journald.conf.d/00-systemd-conf.conf.

刪除附加設置RuntimeMaxUse=64M後,我現在可以在/etc/systemd/journald.conf.

提示:在 journald 啟動時使用 strace 來查看它真正使用了哪些配置文件以及讀取它們的順序。這就是/lib配置文件最終顯示的方式。

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