Linux
如何記錄連續流的最後 X 行
我有一些應該或多或少無限期執行的程式碼,但是在它崩潰的情況下,我希望看到它的輸出。是否有任何命令或命令組合我可以在 Linux 中使用來僅儲存命令標準輸出的最後 X 行,這樣如果我的程式碼已經執行了幾天,我最終不會得到一個 100,000 行的文本文件但是只有最後說,已經輸出了 100 行?
更重要的是,是否可以讓這個文本文件中始終只有最後 100 行左右,這樣如果我在程式碼執行時隨時查看它,我可以看到我的程式碼一直在做什麼?
您正在尋找“環形緩衝區”。Serverfault Sister站點連結到Linux接受的答案:
100000 行每行 100 個字元仍然只有大約 10 MB,因此保存所有內容並蒐索您想要的內容,或者只是閱讀
tail
.但是,如果您不想全部保存,則有一些選擇。對於日誌文件,通常會輪換日誌,即在文件足夠大後,將其重命名並通知程序重新打開其輸出,然後轉到具有相同名稱的新文件。如果程序本身不知道如何執行此操作,則可能需要修改程序。(只是重命名文件無濟於事,因為打開的文件句柄仍將指向重命名的文件。)
上述問題的解決方法:將輸出傳送到
logger
,將其發送到 syslog,然後對輸出進行日誌輪換,因為 syslog 肯定會支持它。負面因素:有點混亂,因為它會污染無關的日誌文件,除非您注意將特定的日誌數據配置到單獨的文件中。也增加了一點成本。三:在裡面執行程序,
screen
把回滾視窗的大小設置成你喜歡的大小。(screen -h <N>
啟動時,或使用:scrollback <N>
inside screen 更改大小。開始時在 screen 中滾動回滾可能有點不直覺,但您可以使用:hardcopy -h <filename>
.