Logging
如何在打開/實時文件上手動旋轉日誌而不使用 logrotate?
我的 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 }
我想手動做這些事情:
- copytruncate :獲取目前日誌文件,但允許 syslog-ng 繼續在目前打開/實時文件上執行
- (不在 logrotate.conf 上面)
split
:將目前日誌滾動分解成更小的塊xz
: 壓縮到存檔文件夾我可以
split(1)
而且xz(1)
很好,但是當我試圖抓住目標文件時,沒有骰子。我試過
sudo mv myDevice.log ZmyDevice.log && touch myDevice.log
了,但是 syslog-ng 只是隨著原始文件(及其新名稱)移動,並愉快地保持寫入。自從我想到 syslog-ng 是如何引用該文件的時候,這產生了一些影響。因此,我試圖弄清楚如何編寫某種手冊
copytruncate
,以便將文件“原樣”切割成另一個文件,並讓 syslog-ng 繼續處理它想要的內容。
移動文件,然後向 syslog-ng 程序發送 SIGHUP:
殺死-HUP
這將導致它重新打開所有打開的文件,從而釋放您剛剛移動/重命名的文件並允許您繼續。然後它將重新打開 /log/myDevice/myDevice.log 並開始寫入。
查找哪些程序打開了文件:
fuser /path/to/file
. 然後用於kill -SIGSTOP
掛起正在寫入文件的程序。然後旋轉文件,複製它,截斷它,無論您需要做什麼,然後使用kill -SIGCONT
.