私のGoogle-Fuは私をとても近づけていますが、そこには完全ではありません。Linuxでは環境に配慮しすぎて、それらをまとめることができないと思います。
200GBを超える非常に大きなログファイルがありますが、まだ書き込まれています。 Logrotateは、ディスク容量が問題になる前に時間内に到達しません。また、構成内の他のすべてのターゲットに影響を与えたくないので、logrotate
の別のラウンドを起動したくありません。 _logrotate.conf
_ファイルに新しいスタンザを次のように追加しました。
_/log/myDevice/myDevice.log {
compress
daily
rotate 360
maxage 360
missingok
compresscmd /usr/bin/xz
dateext
compressext .xz
copytruncate
olddir /log/archive/myDevice
}
_
これらのことを手動で行いたいと思います。
split
:現在のログロールを小さなチャンクに分割するxz
:アーカイブフォルダに圧縮しますsplit(1)
とxz(1)
は問題なく実行できますが、ターゲットファイルを取得しようとすると、サイコロが表示されません。
私は_Sudo mv myDevice.log ZmyDevice.log && touch myDevice.log
_を試してみましたが、syslog-ngは元のファイル(およびその新しい名前)とともに移動するだけで、書き込みを楽にしてしまいます。 syslog-ngによってファイルがどのように参照されているかを考えたときから少し作りました。
だから私は、ファイルをある種の手動copytruncate
を実行して、ファイルを「所定の場所」にある別のファイルにカットし、syslog-ngがそれを何にかじり続けるようにする方法を見つけようとしています。欲求。
ファイルを移動してから、SIGHUPをsyslog-ngプロセスに送信します。
殺す-HUP
これにより、開いているすべてのファイルが再度開かれ、移動/名前変更したファイルが解放され、続行できるようになります。次に、/ log/myDevice/myDevice.logを新しく開き、そこへの書き込みを開始します。
ファイルを開いているプロセスを見つけます:fuser /path/to/file
。次に、kill -SIGSTOP
を使用して、ファイルに書き込んでいるプロセスを一時停止します。次に、ファイルを回転し、コピーし、必要に応じて切り詰めてから、kill -SIGCONT
を使用してプロセスを再開します。