之前修改了服務器配置都是簡單粗暴的用restart重啟apache/nginx,據說這樣不好。需要平滑重啟服務器,避免重啟時打斷用戶行為。
然后就根據官方文檔了解了一下平滑重啟的命令。本文根據Apache/Nginx官方文檔翻譯。
Apache
apachectl -k graceful
graceful信號使得父進程建議子進程在完成它們現在的請求后退出(如果他們沒有進行服務,將會立刻退出)。父進程重新讀入配置文件並重新打開日志文件。每當一個子進程死掉,父進程立刻用新的配置文件產生一個新的子進程並立刻開始伺服新的請求。
重啟代碼的設計能夠確保MPM進程控制指令的正常運作,也就是在重啟過程中確保有適當數量的進程和線程以響應客戶端的請求。它是這樣StartServers的:如果在一秒鍾以后還沒有新創建StartServers個子進程,則創建出足夠完成現在任務的子進程個數。因此,代碼除了保有能夠維持服務器的現有負載數量的子進程外,也確保StartServers按你的意願運作。
Nginx
nginx -s reload
當主進程收到重新加載配置的信號后,它先檢測新配置的語法是否規范,然后開始嘗試加載新的配置。如果上面的步驟成功,主進程開始啟動新的工作進程並且發停止信號給舊的工作進程;否則,主進程回滾到改變前的配置,並繼續使用舊的配置工作。舊的工作進程接受到停止工作信號,它停止接受新的連接請求,但繼續處理當前的請求知道這些請求被處理完成。最后,舊的工作進程退出。