いくつかのPythonスクリプトを実行するcronジョブがあり、それらは大量のログファイルを生成します。それらが大きくなるのを防ぐにはどうすればよいですか?特定のサイズに達したときにファイルを削除すると完璧です。数日ごとに、ファイルは現在50MBですが、はるかに大きくなり、低速のインターネット接続でバグをダウンロードして分析するのに永遠に時間がかかります。スクリプトがどこで失敗したかを確認するために、最後の1000行だけを確認したいのです。
これを行うために何かをコーディングできることは知っていますが、Linuxに私が知らない何かがあるかどうか疑問に思っていました。大きなログファイルが一般的な問題だと思います。ありがとう。
承認された回答:
通常は、関心のあるアクティビティのみをログに記録し、可能であればプログラムの冗長性を低くするように構成する必要があります。
提案されているように、 logrotateを使用する ログファイルを処理する通常の方法です。ただし、コンテンツを/etc/logrotate.conf
に追加する代わりに /etc/logrotate.d/
に独自のジョブを追加する必要があります 、そうでない場合は、リリースのアップグレード中に構成ファイルのより多くの差分を調べる必要があります。
これが私がphpスクリプト用に作成した例です:
/var/log/some-php-app/*.log {
daily
rotate 10
delaycompress
compress
notifempty
missingok
}
-
/var/log/some-php-app/*.log
–は、ログファイルが配置されているパスとその名前です。ご覧のとおり、ワイルドカードを使用して、ルールを複数のログファイルに適用することもできます。 - 毎日 –ログファイルを毎日ローテーションします。代替案:毎時、毎週、毎月、毎年、maxsize、maxage
- 回転 カウント –ファイルは、メールディレクティブで指定されたアドレスに削除またはメール送信される前に、カウント回数ローテーションされます。
- delaycompress –前のログファイルの圧縮を次のローテーションサイクルに延期します。
- 圧縮 –古いバージョンのログファイルをgzipで圧縮します。
zless
を使用できますless
の代わりに ファイルを表示します。 - 通知なし –ログが空の場合、ログをローテーションしません。
- missingok –ログファイルがない場合、エラーメッセージを発行せずに次のローテーションジョブに進みます。
その他のオプションについては、logrotateのマンページをご覧ください。