今回は、定期的にファイルやディレクトリをクリーンしてくれる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行目あたり
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[root@localhost /]# cat /usr/lib/tmpfiles.d/tmp.conf # This file is part of systemd. # # systemd is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. # See tmpfiles.d(5) for details # Clear tmp directories separately, to make them easier to override q /tmp 1777 root root 10d q /var/tmp 1777 root root 30d # Exclude namespace mountpoints created with PrivateTmp=yes x /tmp/systemd-private-%b-* X /tmp/systemd-private-%b-*/tmp x /var/tmp/systemd-private-%b-* X /var/tmp/systemd-private-%b-*/tmp # Remove top-level private temporary directories on each boot R! /tmp/systemd-private-* R! /var/tmp/systemd-private-* |
設定ファイルを作成する前に…
設定を書き込んでいく前に知っておいた方が良いディレクトリの使い分けについて。
設定ファイルはtmpfiles.dというディレクトリの下に配置しますが、1つ注意点があります。
- /usr/lib/tmpfiles.d
- /etc/tmpfiles.d
の2つ存在します。
/usr/lib/tmpfiles.dには、デフォルトの設定
/etc/tmpfiles.dには、カスタム設定※こっちが優先される
基本的には上記のような使い分けをするのが王道です!コレだけ覚えていればOK!
設定ファイルを作成する
今回したいこと
今回、以下のような条件のディレクトリを作成します。
こんな感じで進めて行きたいと思います。
設定ファイルを作る!
まずは、/etc/tmpfiles.d配下にファイルを作ります!(名前は〇〇.conf)
ファイル名はなんでも良いですが、わかりやすい方が後々便利だと思います。
今回私は、/testdirを作成するので、 /etc/tmpfiles.d/testdir.confにします。
1 2 |
設定ファイル、testdir.confを作成する # vi /etc/tmpfiles.d/testdir.conf |
そして用件に沿って↓のように追記しましょう
q /testdir 1777 root root 2d
1 |
(型) (クリーンするディレクトリ) (権限) (所有者) (所有グループ) (最終更新からどの期間経てば削除するか) |
まず、”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分)とかに変更してテストをしてみても良いと思います。
というわけで、今回はsystemd-tmpfilesを使用して定期的にクリーンするディレクトリの作成方法をご紹介しました。
では〜〜〜
参考文献
- tmpfiles.d(5) — Linux manual page
コメント