我有一個程序,每次運行都會產生一個新的日誌檔案。為了觀察發生了什麼,我想tail -f
記錄日誌 - 唯一的問題是我實際上並不提前知道檔案名稱。
那麼,有沒有辦法追蹤與特定(shell glob)模式匹配的所有檔案?我想我可以輕鬆編寫這樣的腳本,但我想知道是否已經有解決方案。
答案1
tail
我認為在不知道名稱的情況下沒有直接的方法- 如果您知道那麼tail --follow=name --retry
就可以工作,它會等待文件出現,然後開始跟踪它。
我建議編寫一個小 shell 腳本,用於inotifywait
監視檔案的出現,然後開始tail -f
追蹤它。
答案2
如果您事先不知道檔案名稱:
- 決定檔案名,例如
foo.log
- 觀察該文件:
tail -F foo.log
(foo 是否存在並不重要) - 使用工具監視目錄中的檔案變更並執行命令
對於命令,可以:
- 移動新檔案以覆蓋 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 之上的一個薄層),而且設定起來非常快速且簡單。