使用 Unix 尾部監視多個檔案可能無法按預期工作
由艾倫·馮,高級軟體工程師
"尾 -F"通常用於監視檔的更新。
以下是如何使用尾部同時監視多個檔。
$ 尾 -F 檔案1 檔案2
上述命令的問題是,寫入 file1 和 file2 的文本可能無法在新行邊界刷新到磁碟。因此,可以從尾輸出中從另一個檔中將一個文件的文本拼接成文本。
下面是問題的示例。假設以下內容寫入檔 1。
line_1
line_2
line_3
此外,假設以下內容寫入file2。
LINE_A
LINE_B
LINE_C
如果文本未在新行邊界處刷新,則可以從尾部獲取以下輸出。
lineLINE_A
_1
LINE_B
line_2
LINE_C
line_3
正如您所看到的,"LINE_A"被拼接成"line_1",導致第一行中的"lineLINE_A"。以下是解決上述問題的一些方法。
並行運行多個尾部,並將每個尾部的輸出管道到 grep。您需要使用 grep 中的選項才能僅在新行邊界上列印。
寫入新尾部,僅在從檔接收完整行時列印。
修改產生日誌檔的應用程式,僅創建單個日誌檔。您需要確保文本在新行邊界處刷新到單個檔。
下面是上面要實現的代碼 (1)。
$ vi multi-tail.sh
*!/bin/sh
• 當此退出時,也退出所有後台進程。
陷阱'殺死$(工作-p)'退出
• 走過每個指定的檔案名稱
檔在"$_"
做
• 後台的尾部檔。
尾部 -F $file |grep =行緩衝"" |
做
* 等待 . .直到 CTRL+C
等
我將留給讀者實現 (2) 和 (3)。
感謝您的閱讀!