Tmp

如何編輯 systemd-tmpfiles-clean 的計時器?

  • January 6, 2022

我正在嘗試將 Apache PrivateTmp 文件的清理間隔從預設的 30 天更改為 6 小時。我讀到編輯時間間隔,我應該設置一個覆蓋文件/etc/tmpfiles.d/tmp.conf而不是編輯/usr/lib/tmpfiles.d/tmp.conf,所以我用以下幾行創建了該文件:

# override the default cleanup intervals
v /tmp 1777 root root 6h
v /var/tmp 1777 root root 6h

現在,如果我執行systemd-tmpfiles --clean,預期的文件將被刪除,所以這部分正在工作。

但是,/usr/lib/systemd/system/systemd-tmpfiles-clean.timerOnUnitActiveSec設置為 1d。我認為這意味著我的 6 小時清理間隔將有效地限制為每天一次。

我可以將該計時器間隔更改為 6 小時或更短,但我應該直接編輯此文件,還是創建一個類似於/etc/tmpfiles.d

**更新:**這個問題被標記為重複,但我在連結的問題中看不到任何關於我是否應該使用文件的覆蓋tmp.conf文件。

**解決方案:**顯然我不能將此作為答案發布,因為該問題已被標記為重複。但這就是我創建覆蓋文件以更改計時器間隔的方式:

將現有的計時器文件複製到相應的覆蓋目錄:

sudo cp /usr/lib/systemd/system/systemd-tmpfiles-clean.timer /etc/systemd/system

編輯新副本(將 1d 值更改為 1h):

sudo nano /etc/systemd/system/systemd-tmpfiles-clean.timer

載入新的計時器文件:

sudo systemctl daemon-reload

確認新的計時器間隔已載入:

sudo systemctl list-timers

這個答案有點晚了,但我會把它留在這裡,以防其他人偶然發現它。

我認為了解systemd覆蓋如何工作的底層機制很重要。您的解決方案說明您弄清楚了低級實現細節以及如何手動創建覆蓋,這是一件好事。

為了完整性和傳播最佳實踐,人們應該使用內置systemctl函式來創建覆蓋(正如評論中提到的@muru)。例如:

sudo systemctl edit systemd-tmpfiles-clean.timer

例如,這可以確保在文件上正確設置權限,並通過依賴底層抽象來減少引入錯誤的可能性。

如果要查看組成本單元的組件,請systemctl cat按以下方式使用:

sudo systemctl cat systemd-tmpfiles-clean.timer 

# /usr/lib/systemd/system/systemd-tmpfiles-clean.timer
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Daily Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)

[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

# /etc/systemd/system/systemd-tmpfiles-clean.timer.d/override.conf
[Timer]
# reset existing triggers
OnBootSec=
OnUnitActiveSec=
# add new triggers
OnBootSec=15min
OnUnitActiveSec=60min

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