在linux 系統上可以使用nohup 來執行命令,nohup 可以像控制檯一樣完整顯示程序輸出的日誌信息
簡單的用法:
nohup /test.sh > /test.log 2>&1 &
這樣test.sh 運行所有的日誌信息都會記錄在 test.log 中
在實際使用中 test.log 會隨着程序運行的時長和日誌量造成 test.log 增大也不方便管理,於是就想法清空日誌
簡單暴力的方法就是重啓程序,會自動清空,但是如果在不重啓程序的情況下清空文件內容,讓日誌文件重新記錄
linux 清空文件方法有很多,這裏舉例說明使用:
cp /dev/null /test.log
這樣 test.log 就變空了,可是在實際使用中發現,test.log 一會兒又會變化原大小,比如test.log 原大小爲10KB 執行命令後大小爲0KB 當程序運行有新日誌時test.log 大小又馬上變爲10KB+ 但是內容只有新日誌內容,沒有清空前的內容了。
經過查閱資料和測試,最終找到問題了 > /test.log 是覆蓋原文件內容,因爲我們執行清空命令,原進程還是有原日誌的信息因爲對於進程已經獲取到對應文件的句柄了。當有新日誌時對應進程會直接覆蓋內容,這樣造成數據不一致
解決方法使用追加日誌文件的方法,把執行命令修改爲:
nohup /test.sh >> /test.log 2>&1 &
這樣執行日誌就是以追加的方式寫入文件,當我們需要清空日誌時執行清空命令,然後新的日誌會追加進去而不是再覆蓋進去。