私はcrontabを使用して4時間ごとにlogrotateを実行します。 50Gごとにファイルを回転させ、4時間以内に完了すると予想したいと思います。私のものログ循環の構成次のように:
/log/*/*/*/*.log
{
size 50G
copytruncate
missingok
notifempty
nocompress
postrotate
dir=${1%/*}
mv "$1" "$dir"\/"$(basename $1 .1)-$(date +'%Y%m%d_%H%M').1";
endscript
lastaction
find /log -type f -name "*.1" -exec bash -c 'gzip -nc "$1" > "${1:0:-2}.gz"; rm "$1"' _ {} \;
endscript
}
しかし、私のファイルはGB単位です。それでは、copytruncateオプションを使用しても大丈夫でしょうか?それとも別の選択肢がありますか?私が考えることができる1つの解決策は、コピーするのではなく、事前回転スクリプトを使用してファイル名を変更することです。
答え1
1) ログファイルが大きすぎます。 crontabにlogrotateエントリを追加して(5分ごと)、より小さく処理しやすくします。
2) copytruncate はファイルをコピーし (50GB が多い) ファイルを 0 バイトに切り捨てます (ftruncate)。この操作には時間がかかり、操作中に記録が失われます。
3)ファイルを解析し、不要な情報(フィールドの説明 - ヘッダーの生成など)を削除し、カンマ(または他のマーカー)で区切られた値のみを保持します。
最高のオプション:
- より高い周波数。
- コピー切り捨てがありません。
-kill -HUP は conf ファイルのプロセスを再読み込みします。
- スピン1.
- 圧縮。
- gzipで圧縮されたログファイルを安全な場所に移動します。