logrotate
でログファイルをコピーして切り捨て、別の物理ディスクでolddirを使用する必要があります。マニュアルによれば、logrotateのデフォルトの動作は元のログファイルの名前を変更するだけなので、olddirを別の物理ディスクに置くことはできません。これは、別の物理ディスクでは不可能です。
でも、私はcopytruncate
ディレクティブを使用しています。これは、元のファイルのコピーを作成してから元のファイルを切り捨てます。したがって、新しくコピーされたファイルを別の物理ディスク上の別の場所に移動しても問題はありません。
しかし、logrotateを実行しても、logfileとolddirが別のデバイスで動作しているというメッセージが表示されます。
それを回避する方法はありますか?ログファイルを目的の場所に移動するカスタムpostrotateスクリプトを実行している可能性がありますか?
これはlogrotateのmanページからです。
olddir directory <br>
Logs are moved into directory for rotation. **The directory must be on the
same physical device as the log file being rotated**, and is assumed to be
relative to the directory holding the log file unless an absolute path
name is specified. When this option is used all old versions of the log
end up in directory. This option may be overridden by the noolddir
option.
同じ物理デバイスにolddir
が存在することは制限です。
以下の回避策を使用できます。
olddir
を同じ物理ディスク内のディレクトリに設定し、postrotate
スクリプトを使用してolddir
の内容を別の物理デバイス上のディレクトリに移動します。
Logrotate設定ファイルの例:
/var/log/httpd/*log {
copytruncate
olddir /var/log/httpd/olddir
rotate 5
missingok
notifempty
sharedscripts
delaycompress
postrotate
mv /var/log/httpd/olddir/* /vagrant/httpd/olddir/
/sbin/service httpd reload > /dev/null 2>/dev/null || true
endscript
}