清空熱檔案的常見錯誤操作

2021-10-02 13:41:41 字數 1577 閱讀 2575

一、乙個錯誤操作

在生產環境中,

假如我們要清空乙個正在寫入的檔案, 比如 「清空 2020020501.log」

我見過許多同學會這樣操作:

rm

-f 2020020501.log && touch 2020020501.log

二、為什麼這個操作錯誤?

這樣操作後會發現 2020020501.log 不再有新的寫入了,或者說那些本來好好往 2020020501.log 寫著日誌的程序,並不能往新 touch 的 2020020501.log 寫入日誌:

tail -f 2020020501.log

.

此時執行lsof | grep delete | grep 2020020501.log

還會發現,那些寫日誌的程序,

還 hold 著舊的 2020020501.log 檔案控制代碼沒釋放:

testpro 27168           root    4u      reg             252,17

124055696

54801882

/testlog/

2020020501.log (deleted)

testpro 27169 root 4u reg 252,17

124055696

54801882

/testlog/

2020020501.log (deleted)

testpro2 30035 root 4u reg 252,17

124064390

54801882

/testlog/

2020020501.log (deleted)

testpro2 30035

30045 root 4u reg 252,17

124064390

54801882

/testlog/

2020020501.log (deleted)..

....

三、怎麼解決這個錯誤操作帶來的問題?

為了讓新 touch 的 2020020501.log 能繼續寫入log,

需要重啟所有正在寫入 2020020501.log 的程序。

在這個測試 case 裡面,需要重啟 testpro 和 testpro2 。

由此可見,

如果不小心錯誤地將乙個被許多程序讀寫中的熱檔案rm刪除了,

那就需要重啟所有相關程序,才能恢復正常讀寫。

這就非常麻煩了,因此強烈不建議通過rm刪除程序讀寫中的熱檔案。

四、正確的操作是怎樣的?

> 2020020501.log
或者

echo > 2020020501.log

git錯誤操作挽救的指令

git log 檢視提交歷史日誌 git log pretty oneline 簡化版日誌 git reflog 檢視本機操作過的所有的指令 git reset hard 版本號 會回退除了此版本其他都沒有了 git reset hard 刪除前版本號 撤回來剛才的刪除 git diff 檔案名字 ...

Mybatis日期比較的錯誤操作

mybatis總結2020目錄 一 查不到資料 二 可以查到資料 三 原因 四 為什麼會在後面指定jdbctype,及真正的錯誤?五 關於什麼時候使用jdbctype?實際上 資料庫中該字段的型別是 order time datetime default null comment 下單時間 上面sq...

PLC系統中的線間電容常見的錯誤操作

電纜的導體之間存在電容,合格的電纜可以將該電容限制在一定範圍內。是一條合格的電纜。當電纜長度超過一定長度時,線間電容也會超過要求值。當該電纜用於plc輸入時,線間電容可能會導致plc誤操作,會出現很多不可理解的現象。主要是 1 明明接線正確,但plc沒有輸入 2.沒有plc應該有的輸入,但有plc不...