我有一個軟體,可以在重新啟動時輪換其日誌檔案。然而,在開發過程中,我經常重新啟動它,所以我想隨時監控最新的日誌檔案。
如果我less
正常啟動less program.log
並按Shift+f到尾部,則當日誌檔案輪換時,我將繼續監視舊日誌檔案。我認為這是因為索引節點號保持不變並且less
有一個指向該索引節點的開啟檔案句柄。
是否可以監視目前調用的任何日誌檔案的最新活動program.log
?
具體來說,我正在開發 Sun 作業系統,因此適用於 Sun 作業系統的解決方案將是理想的選擇。
答案1
less --follow-name
如果您的版本less
支持,請使用它。
該選項是在版本 416 中引入的。
Shift+F然後在 內執行正常的跟隨指令less
。
答案2
該less
選項--follow-name
只是解決方案的一部分;
要替換tail -F
,需要另一個參數:
less --follow-name +F file.log
單獨的選項less --follow-name file.log
實際上並不會在文件更新後開始。您需要按 進入跟隨模式ShiftF。
(退出導航模式ControlC。)
而不是遵循文件,--follow-name
改變行為的更少。它使 follow內部的
命令鍵基於檔案名,而不是檔案描述符。 ShiftFless
此外,沒有以less
跟隨模式啟動的正常選項。
但你可以使用命令列給出執行的按鍵啟動後,透過在它們前面加上前綴+
.
將修飾符選項與 , 結合使用+F
,less
實際上會以(修改後的)跟隨模式啟動。
單獨使用+F
相當於 plain tail -f
:
less +F file.log
答案3
我剛剛在 U&L Q&A 中找到了答案,標題為:如何進行tail -f
日誌輪替檔?。
使用tail
:
(如果可以選擇在您的系統上安裝 GNU tail)
tail -F program.log
來自尾部手冊頁:
-f, --follow[={name|descriptor}]
output appended data as the file grows; -f,
--follow, and --follow=descriptor are equivalent
-F same as --follow=name --retry
--retry keep trying to open a file even when it is or becomes
inaccessible; useful when following by name, i.e., with
--follow=name
關鍵是--retry
開關。這告訴tail
命令繼續重試按名稱追蹤檔案。此-F
開關同時執行 a-f
和 a操作--retry
。
使用less
正如@StephaneChazela 在評論中指出的那樣,以下內容將不起作用。
tail -F program.log | less
您唯一的其他選擇是直接使用 less ,假設它直接支援--follow-name
開關和less
文件,tail
完全放棄使用。
less --follow-name program.log