経緯
ログファイルがdiskを圧迫し、サーバ処理が出来ないという問題が発生。暫定的にファイルを削除しようと思ったが、lotateされてあるファイルなので、logrotate.dが使えない。
しょうがないので、cronを使う。
cronの記載
http://www.server-memo.net/tips/crontab.html
これを見れば十分。
find
findはいつも細かいオプションを忘れる。本来は、findだけで、もっと色々出来るのだが、パイプで繋ぐのを多用している気がするなあ。
-atime (+/-)n
最後にアクセスしたのが n日前の file/dir を検索(+n:n日以上、-n:n日以下)
-ctime (+/-)n
最後にステータスが修正されたのが n日前の file/dir を検索(+n:n日以上、-n:n日以下)
-mtime (+/-)n
最後にデータが修正されたのが n日前の file/dir を検索(+n:n日以上、-n:n日以下)
http://www.rep1.co.jp/staff/200vcxg/217rav/find_n_lcd_-linux_command_dict.htm
なのだが、「何分前」というのは以下を使う。
-amin -cmin -mmin
実際のcronの記載
$ crontab -l
10 0-23/1 * * * find /var/log/xxxx -type f -mmin +180 | grep -E ".log-xxxx$" | xargs rm >/dev/null 2>&1
毎時10分に、/var/log/xxxx
ディレクトリにある、modify後180分経った.log-xxxx
というsuffixの付くlogファイルを削除する。
本来は、ワンライナーではなくシェル化すべきだが、暫定対処なのでそのまま。
gzip化するのなら、こう。
$ crontab -l
10 0-23/1 * * * find /var/log/xxxx -type f -mmin +180 | grep -E ".log-xxxx$" | xargs gzip >/dev/null 2>&1