【systemd-tmpfiles】CentOS8でディレクトリ内のファイルを定期的に消す方法

今回は、定期的にファイルやディレクトリをクリーンしてくれるsystemd-tmpfiles

(CentOS6まではtmpwatch)の使い方について調べてみました。

 

systemd-tmpfilesで何ができる?

systemd-tmpfilesとは/tmp/var/tmp配下にあるファイルやディレクトリを定期的にお掃除している機能です。

systemd-tmpfilesの設定をカスタムすることで任意のディレクトリを定期的にお掃除できます。

 

複数人で使っているサーバの場合、/tmpがごちゃごちゃしていても勝手にファイルを消せないし、

/tmpはデフォルトで10日間経過したファイルしか削除されないので地味に長い……

そんな時にsystemd-tmpfilesでユーザのホームディレクトリ内に自分専用のゴミ箱ディレクトリが作れちゃいます。

 

systemd-tmpfiles-clean.serviceが、お掃除をしてくれるのですが…

細かく説明すると、

  • 設定ファイルは/etc/tmpfiles.d/*.conf
  • 設定ファイルを/usr/lib/systemd/system/systemd-tmpfiles-clean.serviceが呼び出す
  • systemd-tmpfiles-clean.service/usr/lib/systemd/system/systemd-tmpfiles-clean.timerが呼び出す(デフォルトの呼び出し間隔は起動15分後、以降は1日1回

こんな感じになっています。

 

定期的にお掃除したいディレクトリがある場合は/tmpに入れればいいじゃん!ってことなんですが、/tmp配下は最終更新時間から10日後/var/tmp配下は30日後のファイルやディレクトリを削除していますので、2日経ったら消える様にしたい!みたいな時に役立つのです。

 

/tmp, /var/tmp の2ディレクトリついては、/usr/lib/tmpfiles.d/tmp.confを見れば設定を確認できます。

↓ 12,13行目あたり

 

設定ファイルを作成する前に…

設定を書き込んでいく前に知っておいた方が良いディレクトリの使い分けについて。

 

設定ファイルはtmpfiles.dというディレクトリの下に配置しますが、1つ注意点があります。

/etc/tmpfiles.d配下に設定ファイルを作る!!!
tmpfiles.dの設定項目というのは、
  • /usr/lib/tmpfiles.d
  • /etc/tmpfiles.d

の2つ存在します。

 

/usr/lib/tmpfiles.dには、デフォルトの設定

/etc/tmpfiles.dには、カスタム設定※こっちが優先される

基本的には上記のような使い分けをするのが王道です!コレだけ覚えていればOK!

設定ファイルを作成する

今回したいこと

今回、以下のような条件のディレクトリを作成します。

・/testdir 配下のディレクトリ・ファイルをクリーン対象とする
最終更新時間から2日経っていた場合は削除されるようにする
/testdirのパーミッションは全ユーザがアクセスできるように1777にする

こんな感じで進めて行きたいと思います。

設定ファイルを作る!

まずは、/etc/tmpfiles.d配下にファイルを作ります!(名前は〇〇.conf)

ファイル名はなんでも良いですが、わかりやすい方が後々便利だと思います。

今回私は、/testdirを作成するので、 /etc/tmpfiles.d/testdir.confにします。

 

 

そして用件に沿って↓のように追記しましょう

q /testdir 1777 root root 2d

 

まず、”q”の部分はType(型)です。

q“・”v“・”d“はディレクトリを表していますが、”q“は、あてはまなければ”v“を、それでもダメなら”d“を参照しにいくようなのでとりあえずディレクトリなら”q“を書いておけばOKです!

(CentOS7では”q“は存在しませんので”v“を使ってください。詳しくは”# man tmpfiles.d”)

ちなみにファイルは”f“です(ファイルは使うことあるのかな?)。

 

次にお掃除したいディレクトリ、またはファイルを書き込みます。

 

その後、所有権限所有者グループを指定し、

最後に指定したディレクトリ内のファイル・ディレクトリを最終更新日から何日(何時間)経ったから削除するかを指定します。

 

期間については○d(日)○h(時間)、○m(分)というように指定していただけばと思います。

 

最後に確認!!

設定をすぐに読み込ませるには再起動を行いましょう

# reboot もしくは # shutdown -r now

 

再起動後、

# ls -l /

で確認すれば/testdirが作成されているはずです!

もし、本当に消えるのか不安な方は設定ファイル内の“2d”(2日)“1m”(1分)とかに変更してテストをしてみても良いと思います。

ファイルの経過時間チェックは起動15分後、それ以降は1日1回となっているので、テストする方は、再起動し、15分待つのが良いと思います。(待ちきれない方はsystemd-tmpfiles-clean.timerファイルをいじってください)

 

というわけで、今回はsystemd-tmpfilesを使用して定期的にクリーンするディレクトリの作成方法をご紹介しました。

 

では〜〜〜

参考文献

 

コメント