【CentOS】/tmp配下のファイルが消える理由
Contents
初めに
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 によるサービス管理