2017-06-20 81 views
1

通常我使用節點將某些服務器消息記錄到本地文件中,但有時文件太大,所以我會定期通過logroate工具歸檔此大文件(例如:將linz.log移動到linz-2017-06 -19.log,現在linz.log文件是空的,但有時node仍然會寫數據到linz-2017-06-19.log,我猜可能linz.log描述符不會被改變)我可以監視Linux上的文件重命名事件嗎?

+2

參見輸出['的inotify()'](http://man7.org/linux/man-pages/man7/inotify .7.html) –

+3

這是[XY問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。應該反過來詳細解釋並詢問實際問題 - 將數據寫入錯誤的文件。 – kaylum

+0

@kaylum確實。解決* real *問題 - 不要編寫更多代碼來隱藏症狀。除非你喜歡黑客一起,複雜的,不可維護的系統,不能很好地工作。僅僅因爲你知道如何編寫代碼並不意味着你應該通過扔掉更多的代碼來解決所有問題。通知守護進程它需要切換到新的日誌文件的標準方法是向進程發送'SIGHUP'。希望你沒有通過重定向'stdout'或'stderr'進行日誌記錄。如果你是,你剛剛知道爲什麼這是一個**糟糕**的想法。 –

回答

0

您可以使用inotifywait

inotifywait有效地等待使用Linux的inotify(7)接口更改文件。它適用於等待來自shell腳本的文件更改。它可以在事件發生時退出,或者在事件發生時持續執行和輸出事件。

實施例:

touch /tmp/foofile 
inotifywait -e move /tmp/ 
mv /tmp/foofile /tmp/barfile 

從inotifywait

Setting up watches. 
Watches established. 
/tmp/ MOVED_FROM foofile 
+0

您應該顯示代碼來執行此操作,而不是命令。堆棧溢出是編程和開發問題的網站。編程答案在這裏適用。 – jww

相關問題