動かざることバグの如し

近づきたいよ 君の理想に

Ubuntuの/tmp自動削除の挙動を調べた話

一定期間すぎると/tmpのデータは削除されていくが、どういう仕組みで動いているのか曖昧だったので調べてみた

環境

そもそもだれがやっているの

  • 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

参考リンク