【CentOS】/tmp配下のファイルが消える理由

初めに

CentOSを使用していて、予期せぬタイミングで/tmp配下のファイルが消えてしまうことがありました。
どのようなタイミングで削除処理が走るのか知らなかったので、これを機に調べてみました。

前提条件

以下の前提条件で検証しています。

  • ハードウェア: VirtualBox上の仮想マシン
  • OS: CentOS 8.2
  • 各手順はroot権限を持つユーザで実施

OSは、CentOSインストールDVDのISOファイルから「最小限のインストール」を選択しインストールを行いました。
バージョン情報は以下の通りです。

# cat /etc/redhat-release
CentOS Linux release 8.2.2004 (Core)

# uname -r
4.18.0-193.el8.x86_64

/tmp配下ファイル削除の仕組み

削除処理の実行タイミング

/tmp配下ファイルの削除タイミングは、systemdのtimerで指定されています。
OS標準でsystemd-tmpfiles-clean.timerが存在し、ファイルの中を確認すると以下の実行タイミングが書かれています。

  • システムが起動してから15分後
  • 前回の実行から1日後
# cat /usr/lib/systemd/system/systemd-tmpfiles-clean.timer 

(略)
[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

削除処理の実行コマンド

削除処理の実行コマンドは、timerファイルと同じ名前のserviceファイルに記載されています。
systemd-tmpfiles-clean.serviceの中を確認すると、サービスが起動する都度/usr/bin/systemd-tmpfiles --cleanが実行されるよう書かれています。

# cat /usr/lib/systemd/system/systemd-tmpfiles-clean.service

(略)
[Service]
Type=oneshot
ExecStart=/usr/bin/systemd-tmpfiles --clean
(略)

削除対象の指定

削除対象のファイルは、/usr/lib/tmpfiles.d/tmp.confで指定されています。
このファイルの中を確認すると、/tmpは10日、/var/tmpは30日で配下のファイルが削除される設定が書かれています。
以下の全ての時間が、削除までの期間を超過した場合、ファイルが削除されます。

  • mtime(最終変更時間)
  • atime(最終アクセス時間)
  • ctime(最終属性変更時間)
# cat /usr/lib/tmpfiles.d/tmp.conf
(略)
# Clear tmp directories separately, to make them easier to override
q /tmp 1777 root root 10d
q /var/tmp 1777 root root 30d
(略)

なお、/etc/tmpfiles.d配下にユーザ定義の設定ファイルを作成することで、上記の設定を上書きすることが可能です。
設定の詳細な仕様は、man tmpfiles.dコマンドの内容を参照してください。

timerの起動状態

systemd-tmpfiles-clean.timerの起動状態を確認してみます。
systemdのserviceユニットと同様に、systemctlコマンドを使用して状態を確認します。
Active:の行に待機状態であることを示すactive (waiting)が表示されています。
Trigger:の行に、次回実行時間(以下の例ではMon 2020-12-07 16:20:10 JST)が表示されています。

# 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; vendor preset: disabled)
   Active: active (waiting) since Sat 2020-12-05 16:04:35 JST; 1 day 2h ago
  Trigger: Mon 2020-12-07 16:20:10 JST; 21h left
     Docs: man:tmpfiles.d(5)
           man:systemd-tmpfiles(8)

まとめ

要点をまとめると以下の通りです。

  • 削除処理はsystemd-tmpfiles-clean.timerで定期実行される
  • /tmp配下のファイルは変更やアクセスが無くなってから10日で削除される
  • 削除期間を変えたければ、設定を変更する

参考文献

tmpfiles.d
Managing temporary files with systemd-tmpfiles on Red Hat Enterprise Linux 7
第3章 SYSTEMD によるサービス管理

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です