tail -f 對新建立的名稱未知的文件

tail -f 對新建立的名稱未知的文件

我有一個程序,每次運行都會產生一個新的日誌檔案。為了觀察發生了什麼,我想tail -f記錄日誌 - 唯一的問題是我實際上並不提前知道檔案名稱。

那麼,有沒有辦法追蹤與特定(shell glob)模式匹配的所有檔案?我想我可以輕鬆編寫這樣的腳本,但我想知道是否已經有解決方案。

答案1

tail我認為在不知道名稱的情況下沒有直接的方法- 如果您知道那麼tail --follow=name --retry就可以工作,它會等待文件出現,然後開始跟踪它。

我建議編寫一個小 shell 腳本,用於inotifywait監視檔案的出現,然後開始tail -f追蹤它。

答案2

如果您事先不知道檔案名稱:

  1. 決定檔案名,例如foo.log
  2. 觀察該文件:tail -F foo.log(foo 是否存在並不重要)
  3. 使用工具監視目錄中的檔案變更並執行命令

對於命令,可以:

  • 移動新檔案以覆蓋 foo.log mv the_new_file_which_appeared foo.log(如果應用程式日誌記錄開啟一次,這將正常工作)
  • 或只是符號連結:ln -s the_new_file_which_appeared foo.log- 並且 tail 應該捕獲它。

要正確監視目錄(步驟 3),您需要一個可設定的智慧工具。

就我個人而言,我會使用警衛守衛::進程

在實踐中,Guard 並不比使用 shell 腳本重多少(它是 Linux 上 inotify 之上的一個薄層),而且設定起來非常快速且簡單。

相關內容