2011-05-05 142 views
0

假設我有一個控制檯程序輸出stdout上的跟蹤調試行,我想在服務器上運行。如何創建「pop_front」的日誌文件?

然後我做的:

./serverapp > someoutputfile 

如果我需要怎麼看節目的時候,我只想登錄到服務器並做:

tail -f someoutputfile 

然而,可以理解隨着時間的推移,someoutputfile會變得相當大。

有沒有辦法讓someoutputfile限制在一定的大小,只有最近的部分?

我的意思是,困難的方法是製作一個自定義的腳本/程序來循環不同文件之間的輸出,但這似乎是矯枉過正。

回答

1

您可以截斷日誌文件。執行此操作的一種方法是在shell命令行中輸入:

>someoutputfile 

。這是一個沒有輸出的重定向,它會清除文件中的所有內容。

這裏棘手的一點是,任何寫入該文件的程序都會在其最後輸出位置繼續寫入文件。因此,文件將立即從0到X字節獲得一個「空洞」,其中X是輸出位置。

在大多數Linux文件系統中,這些孔會產生稀疏文件,這些文件實際上並未使用孔中的空間。因此,該文件可能在開始時包含許多千兆字節的0,但只能在磁盤上使用500 KB。

快速日誌記錄的另一種方法是將內存映射到固定大小的磁盤上:例如16 MB。然後,日誌記錄寫入一個內存指針,當它達到大小限制時,該內存指針將進行環繞。然後它繼續寫在文件的前面。有一種寫位置標記是一個好主意。例如,我使用<====>。我發現這種方法對於調試日誌來說非常快速而且非常棒。

0

我還沒有使用它,但它在這裏得到很好的評價上,請嘗試logrotate

管理輸出文件可以告訴你,一個自定義腳本/解決方案是不是出了問題的更廣泛的討論; - ):Problem with Bash output redirection

我希望這有助於。