Grep

如何對每 500MB / 天滾動的文件進行 tail -f 處理?

  • October 27, 2015

我想執行以下操作來監視日誌文件中的模式:

tail -f ./app.log | grep "My Pattern: .*" >> ./MyPattern.txt &

這工作正常,直到app.log達到 500MB 並且它被移動app-2015-10-28.0.log並創建一個新app.log的。發生這種情況時,tail -f將停止工作。停止並再次執行相同的命令將起作用,但在停止和啟動之間,可能會錯過重新啟動之間出現的模式。

滾動的另一個條件是在 00:00 時。即使日誌小於 500MB,也會發生相同的滾動。

日誌滾動是在應用程序級別完成的,我們無法控制那部分。

我們怎樣才能檢測到日誌已經滾動,而不會錯過感興趣的模式?

tail通常跟在文件描述符 ( --follow=descriptor) 之後,當日誌文件滾動或文件被移走時,該描述符變得不可訪問。從以下的手冊頁中看到tail

  • 重試

即使文件不可訪問或變得不可訪問,也要繼續嘗試打開文件;在按名稱跟踪時很有用,即使用 –follow=name

所以像這樣使用它(tail現在跟隨名稱而不是描述符):

tail --follow=name --retry logfile | grep "pattern"

當文件被截斷或移走時,您將在尾部輸出中看到:

$ tail --follow=name --retry logfile
[...]
tail: logfile: file truncated
[...]
tail: `logfile' has become inaccessible: No such file or directory
tail: `logfile' has appeared;  following end of new file
[...]

引用自:https://unix.stackexchange.com/questions/239079