一定期間すぎると/tmpのデータは削除されていくが、どういう仕組みで動いているのか曖昧だったので調べてみた
環境
- Ubuntu 24.04
そもそもだれがやっているの
- systemd-tmpfiles-clean.timer: このタイマーが定期的に削除処理を起動する
- systemd-tmpfiles-clean.service: タイマーによって起動されるサービスで、実際には
systemd-tmpfiles --cleanというコマンドを実行している
❯ sudo systemctl status systemd-tmpfiles-clean.timer
● systemd-tmpfiles-clean.timer - Daily Cleanup of Temporary Directories
Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-clean.timer; static)
Active: active (waiting) since Mon 2025-04-07 14:51:50 JST; 3 months 4 days ago
Trigger: Sat 2025-07-12 15:07:18 JST; 12h left
Triggers: ● systemd-tmpfiles-clean.service
Docs: man:tmpfiles.d(5)
man:systemd-tmpfiles(8)
Apr 07 14:51:50 ubuntu02 systemd[1]: Started systemd-tmpfiles-clean.timer - Daily Cleanup of Temporary Directories.
タイマーの設定は sudo systemctl cat systemd-tmpfiles-clean.timer するとわかる
[Timer] OnBootSec=15min OnUnitActiveSec=1d
つまりデフォルトでは起動後 15 分経過時点と、それ以降に一日置きにタイマーが発火する。
どういう基準で自動削除されるの
/usr/lib/tmpfiles.d/tmp.confにかかれている。デフォルトは以下
D /tmp 1777 root root 30d
この場合、「/tmp ディレクトリが存在しなければ、パーミッション1777、所有者rootで作成し、もし存在すれば、その中にあるファイルやディレクトリで30日間以上アクセスも変更もされていないものを削除する」という意味
また、これ以外のファイルも読み込んでいるので全部の設定を確認したい場合は
systemd-tmpfiles --cat-config
で確認するべき
ちなみに最終アクセス時刻なので作成時刻ではないので注意。最終アクセス時刻は以下のコマンドで確認できる。
ls -lu /tmp
手動で実行してみたい
デバッグログを有効にして何が起きているのか詳細を確認できる
SYSTEMD_LOG_LEVEL=debug systemd-tmpfiles --clean
削除する条件をカスタマイズしたい
システムのデフォルト設定である /usr/lib/tmpfiles.d/tmp.conf を直接編集するのはパッケージの更新で上書きされてしまう可能性があるのでご法度。
代わりに、/etc/tmpfiles.d/ ディレクトリに新しい設定ファイルを作成して、デフォルト設定を上書きする。
例えば、/etc/tmpfiles.d/tmp.conf というファイルを新しく作成して以下
# /tmp ディレクトリ内の7日以上前のファイルを削除する D /tmp 1777 root root 7d