一、乙個錯誤操作
在生產環境中,
假如我們要清空乙個正在寫入的檔案, 比如 「清空 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不...