はじめに
Linuxには systemd-tmpfiles-cleanと呼ばれるタイマー機能があり、一定期間更新が入っていないファイルを削除することが可能です。本記事では任意のディレクトリに対してこのタイマー機能でファイルを削除する機構を利用する流れについて記載しました。
環境情報
- Red Hat Enterprise Linux Server 7.5
基本情報の確認
以下で基本設定が確認できます。
# systemctl cat systemd-tmpfiles-clean.timer
Timer欄にあるように「起動の15分後&毎日1回」不要ファイル削除のチェックが入ります。
[Unit] Description=Daily Cleanup of Temporary Directories Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8) [Timer] OnBootSec=15min OnUnitActiveSec=1d
以下でステータスは確認できます。
# 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 xx Docs: man:tmpfiles.d(5) man:systemd-tmpfiles(8)
以下のようにタイマーが次回がいつ動くのか?前回いつ動いたのか?が確認できます。
# systemctl list-timers NEXT LEFT LAST PASSED UNIT ACTIVATES Sun 2021-01-31 10:30:33 JST 19h left Sat 2021-01-30 10:30:33 JST 4h 26min ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
不要ファイル削除の設定および動作確認
/etc/tmpfiles.d/
ディレクトリの配下に以下のようなファイルを作成すれば
# cat /etc/tmpfiles.d/test.conf d /root/trashdir 0700 root root 30s
/root/trashdirというディレクトリ配下にある最終更新が30秒以上行われていないファイルをtimerが起動時に削除されます。
試しに以下のようにファイル群を作成して
# ls /root/trashdir a b c
以下のコマンドで手動でタイマーをキックすると作成後30秒以上たっているファイルは削除されます。
# systemd-tmpfiles --clean /etc/tmpfiles.d/testt.conf
同タイマーはデフォルトでは24時間後にも日次で削除処理が行われます。
終わりに
今回はテスト用に短い時間としましたが、例えば一時領域用のディレクトリに30日更新がないファイルは削除するといった利用を行えば、運用の手間をかけずに不要ファイルを削除できます。
以上、ご参考になれば幸いです。