特定のサイズ(50MBなど)に達した後に回転する必要があるログファイルがあります。回転後は圧縮し、回転したファイル名に日付を追加する必要があります。これで、回転したファイルをファイルサーバーにコピーする必要があります。
このために機能しない構成を作成しました。
/var/log/test.log {
compress
missingok
size 50M
rotate 6
create
dateext
postrotate
rsync -avzr /var/log/test.log* REMOTE-HOST:/path/to/directory/
endscript
}
ls /var/log/test.log*
ローカルシステムでディレクトリを実行すると、回転したファイルtest.log-20150211.gz
と空のファイルを見つけることができますtest.log
。 REMOTE-HOSTで回転したファイルの圧縮されていないバージョンtest.log-20150211
と空のログファイルが見つかりました。test.log
私が気になるのは、
- 圧縮ログファイルがリモートホストに送信されないのはなぜですか?
- 回転したファイルのみを転送するにはどうすればよいですか?
編集する:
また、ログが交換された後にサービスが停止したsyslog
ことがわかりました(検査を実行してロギングプロセスが停止したことを確認tailf test.log
)。サービスを再起動する必要があります。service syslog restart
そのセクションを引き続き追加する必要がありますかpostrotate
?
答え1
圧縮ログファイルがリモートホストに送信されないのはなぜですか?
圧縮はほぼ最後に発生する操作なので、postrotate
この時点に到達する前にまだ発生します。logrotate
次の例はマニュアルページで確認できますpostrotate
。
ログファイルが回転した後(ただし、以前のバージョンのログが圧縮される前)、
/sbin/killall -HUP syslogd
[from postrotate script]コマンドが実行されます。
rsync
cronjobとして実行することをお勧めします。
回転したファイルのみを転送するにはどうすればよいですか?
rsync
元のファイル名のみを一致させることです(より*
多くの文字を持たないファイルも一致するため)、より具体的なソース名を使用して一致を削除します。
rsync -avzr /var/log/test.log-* REMOTE-HOST:/path/to/directory/