在linux運維中經常遇到要替換linux伺服器系統程式或者業務應用程式檔案的情況,很多人都會擔心,直接替換會不會導致linux系統程式崩潰或者應用程式崩潰,而需要關閉服務才敢替換,今天在freebuf**偶然閱讀到一篇文章《
如何進行linux平台共享庫替換
》,突然明白了以前沒有搞清楚的幾個自認為「奇怪」的現象。
這些現象包括但不限於:
刪除某個應用程式的部分檔案,為何不會導致此應用程式崩潰
nginx等服務如何可以做到平滑重啟
某些刪除的檔案為何可以通過lsof根據inode找回
為何某些應用程式的檔案替換或變更後需要重啟才能生效
問題的答案在
這篇文章
中得到了很清楚的解答。原來(下面文字為直接引用),
針對未被載入的so,利用複製命令(cp new.so old.so)即可直接完成靜態替換,新so在下次載入時生效。對於已經載入的原so,直接用新so複製替換將會導致相應程式崩潰,此種情況可以使用刪除原so(rm -f old.so)或修改原so名稱(mv old.so oldx.so)後,再複製新so的方法代替,新so同樣在下次載入時生效。因此,按照這個思路,日後在linux運維工作中,可以按照這個理論去做一些事情,比如無論是在修改還是替換錢都保留原始檔,這也是為什麼在做修改前要備份的理由之一。程式崩潰的原因是複製替換操作會破壞系統訪問原so的索引節點inode,導致系統找不到原so。系統為每個載入到記憶體中的檔案建立對應的inode,用來管理該檔案,inode包含了檔案的元資訊,如檔案位元組數、擁有者id、讀寫執行許可權等。系統以inode標識程 序載入的so,不再關心檔名,修改so名稱並未改變對應inode,因此程式可以繼續正常執行;刪除so只是無法檢視,系統直到程式釋放so後才真正刪除so和inode,因此程式也可以繼續正常執行;但是在直接複製替換時,新so將會繼承原so的inode,程式無法繼續訪問原so,從而導致程式崩潰。
Linux伺服器生產環境中的檔案刪除與替換
在linux運維中經常遇到要替換linux伺服器系統程式或者業務應用程式檔案的情況,很多人都會擔心,直接替換會不會導致linux系統程式崩潰或者應用程式崩潰,而需要關閉服務才敢替換,今天在freebuf 偶然閱讀到一篇文章 如何進行linux平台共享庫替換 突然明白了以前沒有搞清楚的幾個自認為 奇怪...
linux 生產伺服器 核心優化
net.ipv4.icmp echo ignore broadcasts 1 表示開啟syn cookies。當出現syn等待佇列溢位時,啟用cookies來處理,可防範少量syn攻擊,預設為0,表示關閉 net.ipv4.tcp syncookies 1 表示開啟重用。允許將time wait s...
linux開發伺服器環境
由於換電腦,重新配置了哈伺服器,都是我的悲劇,用ghost盤對盤對拷的時候選錯了順序,悲劇發生,只有重新配置。配置samba的時候老是寫不進去,找了半天原因,由於寫對單詞了。還是redhat el 6.samba共享建立 首先將全域性設定為share vi etc samba smb.conf 先在...