logrotate(copytruncate)した後のファイルをfindする場合の注意点


何があったか

ログのローテートを行ったあと、ログの転送を行うファイルを絞り込むためにfindコマンドに-mtimeオプションを付けて使用していた。
そして、とある事情によって、logrotateのオプションからcopytruncateを取り除いたことによってファイルを想定通りに絞り込めなくなったという現象が発生した。

どう解決したか

-mtimeではなく-ctimeを使う(-mminも同様で、-cminに置き換える)

なぜ?

coprytruncateによって作られるファイルは最終内容更新日時がログローテート実行時の日時になる。
反対に上記のオプションがない場合は、ソースとなるファイルの最終内容更新日時が引き継がれる。

ログローテートの実行ログにもrenaming /tmp/log/httpd/access_log to /tmp/log/httpd/access_log.1と出力されるように、リネームが行われているからだった。

参考URL

https://linuxjm.osdn.jp/html/GNU_findutils/man1/find.1.html
※用語は上記ページに合わせました

備考

ちなみにcopytruncateの有無にかかわらず、最終ステータス変更日時はログローテート実行時の日時になるので、-ctime-cminを使ったほうが安全な気がする。