1. 程式人生 > >how to start/stop/restart HTTP Server(如何啟動/停止/重啟HTTP伺服器)

how to start/stop/restart HTTP Server(如何啟動/停止/重啟HTTP伺服器)

如果在配置檔案中配置的監聽埠是80(或是其他低於1024)的埠,就須要擁有root許可權去啟動apache,這樣可以使它繫結到這個特權埠。
一旦伺服器啟動並完成一些基本的工作,如開啟日誌檔案,它就會啟動幾個子程序,這些子程序的工作是負責監聽和響應客戶的請求。
主http程序繼續以root身份執行,但是子程序是以低級別許可權使用者執行的。這是由指定的Multi-Procesing Module控制的。
如果apache在啟動時遇到致命的問題,它會在推出之前向控制檯或者日誌檔案寫訊息去描述這個問題。
最常見的錯誤資訊之一是“Unable to bind to port”(不能繫結到埠),這個問題可能是由以下的兩種原因之一:
·試圖去啟動在一個特權埠上server,但不是以一個root使用者身份登入的
·埠被另一個apache例項或者其他的web server繫結
如果想在啟動時就執行server,需要將apachectl新增到系統的啟動檔案中(典型的如rc.local檔案或者在rc.N資料夾中),這樣將會以root執行apache。 
為了停止或者重啟Apache,需要向正在執行的httpd程序傳送一個訊號。有兩種方式可以傳送訊號。其一是使用unix的kill命令直接向程序傳送訊號。
你可能注意到有很多httpd可執行程序執行在系統上,但是不需要向每一個程序都發送一個訊號,只有向父執行緒傳送訊號就可以了。
有四種訊號可以向父程序傳送:TERM,USR1,HUP和WINCH,下面將會花一些時間來描述一下:
使用下面的命令向父程序傳送訊號:
kill -TERM `cat /usr/local/apache2/logs/httpd.pid`
第二種向httpd傳送訊號的方法是使用-k命令列選項:stop,restart,graceful和graceful -stop.
這些引數是針對httpd二進位制的,推薦使用apachectl指令碼,將會把這些引數傳遞到httpd。
向httpd傳送訊號後,可以使用如下的命令 檢視進度:
tail -f /usr/local/apache2/logs/error_log
可以對命令的後半部分修改下讓其和自己的機器上的ServerRoot和PidFile設定相匹配。
現在停止(Stop Now):
signal:TERM
apachectl -k stop
傳送TERM或stop訊號到父程序,這樣會試圖殺死所有的子程序,父程序存在直到子程序全部殺死,當前請求終止,不再響應請求。
優雅地重啟(Graceful Restart)
Signal:USR1
apachectl -k graceful
傳送USR1或graceful訊號到到父程序,去建議子程序在當前的請求結束後退出(沒有任何請求的話直接退出),
但是父程序並不退出,它重新讀取配置檔案,重新開啟日誌檔案。
立即重啟(Restart Now)
Signal:HUP
apachectl -k restart
傳送HUP或restart訊號到到父程序去殺死子程序(就像TERM),但是父程序並不退出,它重新讀取配置檔案,重新開啟日誌檔案。 
優雅的關閉(Graceful Stop)
Signal:WINCH
apachectl -k graceful-stop
傳送WINCH或graceful-stop訊號到到父程序,去建議子程序在當前的請求結束後退出,子程序退出後,父程序也退出。