Logrotate

從標準輸出日誌輪換日誌

  • February 27, 2014

我有一個程序,它需要一個參數來允許從我們使用的硬體進行額外的調試。

日誌只是寫入標準輸出,所以通常我們只是將標準輸出到一個文件,即 ./myprog -AddDebug > myfile.txt,但是我們現在需要保持啟用此日誌記錄以查找我們通常不會發現的錯誤這樣做正在尋找一種輪換日誌的方法,以確保伺服器磁碟空間不會被用完。

我通過向 /etc/logrotate.d/mytrace 添加一個配置文件來使用 linux 中內置的 logrotate 函式,其中包含以下內容:

/home/myprog/mytrace.txt
{
   rotate 5
   size 2M
   copytruncate
   olddir trace_archive
}

當我執行 /usr/sbin/logrotate /etc/logrotate.conf 時,跟踪文件被移動到archvie,但是原始文件被重新創建,但顯然管道失去了,因此不再寫入文件。然後我嘗試用 which 替換create仍然copytruncate將文件放在存檔中,但原始文件一直在增長。

第二個問題,文件僅在我手動執行 logrotate 函式時存檔,當達到文件大小時它不會自動觸發。

您可以就這兩個問題提供的任何幫助將不勝感激。

更新

我已經設法讓它部分工作,為了讓 copytruncate 工作,文件需要以追加模式打開,所以./myprog -AddDebug > myfile.txt應該改為./myprog -AddDebug >> myfile.txt.

我現在唯一的問題是,它只會在我執行時進行輪換,logrotate -v /etc/logrotate.conf所以我如何讓它自動完成?

看起來好像我必須手動創建一個每隔幾分鐘執行一次的 cronjob 以確保日誌被輪換,而不是自動處理。

謝謝

感謝大家的幫助。

我使用了作業系統內置的標準日誌輪換,並將 cronjob 設置為每 5 分鐘執行一次,這似乎以我想要的方式工作。

謝謝

| logger要麼簡單地使用適當的標誌進行管道傳輸,然後使用 syslog 來管理您的日誌文件。

另一種方法是在 apache httpd 發行版中包含一個不錯的幫助程序rotatelogs,它採用標準輸入並為您編寫和輪換日誌文件,例如將您的輸出通過管道傳輸到| /usr/sbin/rotatelogs /home/myprog/myproglog.%Y-%m-%d-%H_%M_%S 2M 並創建具有唯一順序文件名的 2 兆字節的日誌文件。

引用自:https://serverfault.com/questions/573322