logrotateでdelaycompressを打つ

注意:この投稿は初心者のシステム管理者にとってより可能性が高く、経験のある人は自分でそれにアクセスできるでしょう。

この記事では、Debian 5でlogrotateを構成する方法について説明します。

logrotateのdelaycompressオプションは、遅延ログアーカイブ(次のローテーション中)に使用されます。

このオプションは、ログをすぐに閉じることができないプログラム用に作成されたため、logrotateの実行中はアーカイブできません。 情報:「copytruncate」は役に立ちません。 確認済み。

一般に、一部のサーバー(より正確には-VPS)では使用可能なディスクスペースが限られているため、この制限に対処することを余儀なくされましたが、ログは多くのスペースを占有します。

「delaycompress」を使用する場合、毎日の終わりまでに、1つではなく2つの大容量ログがすでにあります。 私の場合、これは余分な〜200-300MBです。これは、リソースが限られているサーバーで顕著です。

それでは、すぐにログをアーカイブするためにどのようにlogrotateを取得しますか?





状況を改善するために、ローテーション設定の「postrotate ... endscript」セクションを使用します。 このセクションでは、必要なアクションを実行するカスタムシェルスクリプトを作成できます。

一般的なケースでは、システムスクリプトの後に「gzip /path/do/log.1」を構成ファイルに追加するだけで十分です-問題は解決します。

1の代わりに、「開始」セクションで説明した内容に置き換えます。 1-デフォルト。

ただし、私はdateextオプションの使用に慣れています。これにより、ローテーションされたログの名前に現在の日付を追加できます。 ログで検索すると便利です。 それに、たとえば、異なるホストのnginxのログは、同じレベルのdocument_rootの下のディレクトリにあります。 この場合、タスクはより複雑になります。

根拠がないように、ngrotxログのローテーションを説明するlogrotateの設定例を示します。



/www-data/*/log/nginx_*.log {

daily

missingok

rotate 30

compress

delaycompress

dateext

create 600 www-data www-data

sharedscripts

postrotate

[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`

for i in `find /www-data/*/log/*.log -type f`; do

if [ -e $i-`date +%Y%m%d` ]; then

gzip $i-`date +%Y%m%d`;

chown www-data:www-data $i-`date +%Y%m%d`.gz;

chmod 0600 $i-`date +%Y%m%d`.gz;

fi;

done;

endscript

}








後回転セクションでは、ログへのすべてのパスについて説明し、圧縮されていないログファイルの存在を確認し、存在する場合は圧縮して必要な権限を設定します。

それだけです。

重要な注意:postrotateセクションの#コメントは機能しません。エラーが発生します。 注意してください。






All Articles