一般在更改 Apache 的設定檔之後,都會重新啓動 Apache 的服務(service),但是如果你的 Apache 網頁伺服器有很多人在用,這樣重新啓動會造成使用者的連線中斷等問題,這裡介紹如何在 Debian/Ubuntu 或是 CentOS 等 Linux 中不會影響 Apache 連線卻可以重新啓動並載入設定檔的方法。

一般 Apache 伺服器不管版本是 v1.x 或是 v2.x 都會有以下的指令可以使用:

  • start
  • restart
  • graceful
  • stop
  • graceful-stop

系統管理者可以利用這些指令控制 Apache 伺服器的啟動或停止等動作。


而我們如果要在不重新啓動 Apache 的情況下重新載入設定檔,就要用到 graceful 這個指令,它會傳送一個 SIGUSR1 的信號(signal)給 Apache 伺服器,讓 Apache 很優雅的(graceful)重新啓動。如果 Apache 本來就沒有在執行,那麼它會直接啟動(start)。

graceful 跟 restart 不太一樣,他不會像 restart 一樣直接中斷目前正在進行的連線,而是會等待所有的連線都結束之後,才會重新啟動、載入設定檔,並且重新開啟 log 紀錄檔。而 graceful 在重新啟動之前,也會使用 apache2ctl configtest 來測試設定檔是否正確。

而 graceful 的用法很簡單,就像這樣:

apache2ctl graceful

在 RHEL/CentOS Linux 中,可使用 Sys V init script 的方式:

/etc/init.d/httpd graceful

或是

/sbin/service httpd graceful

如果是 Debian / Ubuntu Linux 中,則可使用 reload 參數:

/etc/init.d/apache2 reload

在這裡的 reload 其實就是 graceful,它只是換一個讓人比較容易看得懂的字眼而已。

參考資料:nixCraft、apache2ctl(8)