Linux備忘録:tmpwatchについて
sambaで共有している領域にある、リサイクルディレクトリ内を定期的にクリアしたい。 ということで、cronで新たにtmpwatchを動作させるシェルを追加した。 基本的には、バックアップもあることから、24時間以上経過したファイルとディレクトリを削除する設定とする。 テスト用として、以下のコマンドを実行すると、ちゃんと対象となるファイルが表示された。
# /usr/sbin/tmpwatch -tv 24 /hoge/samba/.recycle
・オプション  -t:テストモードで実行する。実際に削除は行わない。  -v:処理の内容を表示する(verbose) ちゃんと表示を確認したので、実際に実行してみた。
# /usr/sbin/tmpwatch -fv 24 /hoge/samba/.recycle
・オプション  -f:rootに書き込み権限無くても削除する。 しかし、動作させてみても、.recycleディレクトリの中が消えていない。 いろいろと検索したり、試したりしたのだが、どうも削除が実行されない。 そこで、以下のコマンドを実行した。
# /usr/sbin/tmpwatch -umcfva 24 /hoge/samba/.recycle
・オプション  -u:ファイルのアクセス時刻(atime)  -m:ファイル・データの変更時刻(mtime ファイルの実データを変更した時刻)  -c:ファイル状態の変更時刻(ctime ファイルのinodeを変更した時刻)  -a:すべてのファイルの種類を対象とする しかし、本来削除されるべきファイルやディレクトリが残っている。 そこでファイルの時刻情報について調べてみた。 atimeについて http://itpro.nikkeibp.co.jp/article/Keyword/20090607/331455/ mtimeについて http://itpro.nikkeibp.co.jp/article/Keyword/20090710/333611/ ctimeについて http://itpro.nikkeibp.co.jp/article/Keyword/20090710/333510/ この時、sambaの領域をクライアントPCからマウントしていたのだが、そこで「.recycle」フォルダ内にアクセスしていた為に、atimeが更新されていたのが原因らしい。 そこでオプションからatimeを省いて実行してみた。
# /usr/sbin/tmpwatch -mcfva 24 /hoge/samba/.recycle
そうすると、無事にほとんどのファイルとディレクトリが削除された。 普段はrecycleフォルダにはアクセスしないので、cronで動作させるには問題無さそうだが、今回のようにクライアントPCからアクセスしてしまうとatimeが更新されるので、注意が必要だ。 tmpディレクトリのクリア等、普段から良く使用しているtmpwatchでも、状況によっては想定した動作結果とならないことが分かった。 注意事項として記録しておく。