1. はじめに
Linuxサーバーの運用において、ログ管理は避けて通れません。
放置すればログは肥大化し、ディスクを圧迫してサービス停止の原因になります。
その対策として logrotate によるローテート設定を行いますが、それだけでは不十分なケースがあります。
標準の logrotate では固定ファイル名のログは管理できますが、ファイル名にタイムスタンプやセッションIDが付与される動的ログなどは管理できません。
本記事では、こうしたログを コマンドで削除する方法 を紹介します。
本記事の検証は Red Hat Enterprise Linux 9.5 上で行っています。
2. logrotate で対応できないログの削除方法
ファイル名にタイムスタンプが付与され、毎回異なる名前で生成されるログファイル については、
logrotate ではローテーション対象として扱うことができません。
例えば、下記のように末尾にタイムスタンプが付与されてしまうログファイルです。
app_log_202509040100.log app_log_202509040110.log app_log_202509040120.log
こうしたログはコマンドでのログ削除が必要になってきます。
find コマンドでの削除
ファイルの削除は、findコマンドで行えます。
以下は、/var/log/work/ 以下にある 6日以上前の .log ファイルを削除するコマンド例です。
find /var/log/work/ -name '*.log' -mtime +5 -delete
-name '*.log': .log で終わるファイルを対象-mtime +5: 最終更新が 6 日以上前のファイルを対象-delete: ファイルを削除
定期実行する場合は、cron に設定します。
以下は、毎日11:00 にコマンドを実行する例です。
0 11 * * * find /var/log/work/ -name '*.log' -mtime +5 -delete
この設定により、必要な保持期間に応じたログ削除を自動化できます。
3. まとめ
- logrotate で対応できないログは、find コマンドで削除可能。
- cron と組み合わせることで、自動化も実現できる。