Logrotate: scp ファイルを別の場所に回転

Logrotate: scp ファイルを別の場所に回転

特定のサイズ(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

私が気になるのは、

  1. 圧縮ログファイルがリモートホストに送信されないのはなぜですか?
  2. 回転したファイルのみを転送するにはどうすればよいですか?

編集する:

また、ログが交換された後にサービスが停止したsyslogことがわかりました(検査を実行してロギングプロセスが停止したことを確認tailf test.log)。サービスを再起動する必要があります。service syslog restartそのセクションを引き続き追加する必要がありますかpostrotate

答え1

圧縮ログファイルがリモートホストに送信されないのはなぜですか?

圧縮はほぼ最後に発生する操作なので、postrotateこの時点に到達する前にまだ発生します。logrotate次の例はマニュアルページで確認できますpostrotate

ログファイルが回転した後(ただし、以前のバージョンのログが圧縮される前)、/sbin/killall -HUP syslogd[from postrotate script]コマンドが実行されます。

rsynccronjobとして実行することをお勧めします。

回転したファイルのみを転送するにはどうすればよいですか?

rsync元のファイル名のみを一致させることです(より*多くの文字を持たないファイルも一致するため)、より具体的なソース名を使用して一致を削除します。

rsync -avzr /var/log/test.log-* REMOTE-HOST:/path/to/directory/

関連情報