web-dev-qa-db-ja.com

古いログを別の物理ディスクのolddirに移動するように強制(または回避策)するにはどうすればよいですか?

logrotateでログファイルをコピーして切り捨て、別の物理ディスクでolddirを使用する必要があります。マニュアルによれば、logrotateのデフォルトの動作は元のログファイルの名前を変更するだけなので、olddirを別の物理ディスクに置くことはできません。これは、別の物理ディスクでは不可能です。

でも、私はcopytruncateディレクティブを使用しています。これは、元のファイルのコピーを作成してから元のファイルを切り捨てます。したがって、新しくコピーされたファイルを別の物理ディスク上の別の場所に移動しても問題はありません。

しかし、logrotateを実行しても、logfileとolddirが別のデバイスで動作しているというメッセージが表示されます。

それを回避する方法はありますか?ログファイルを目的の場所に移動するカスタムpostrotateスクリプトを実行している可能性がありますか?

8
Frodik

これは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
}
16
Shubhangi