[Apache] apachectlのrestart/graceful/stop/graceful-stopの違い

2020年11月19日木曜日

Apache

t f B! P L

Apacheを起動・停止・再起動する方法には、いくつかの方法があります。

service httpdなどのLinuxのOSコマンドを利用する方法や、Apache公式のapachectlコマンド、Windowsであれば、サービス管理画面からGUIで操作できます。

どれを使っても問題ありませんが、Apacheとしてはapachectlコマンドの使用を推奨しています。

この記事は、推奨されてる公式のapachectlコマンドで、Apacheを停止・再起動する時に指定できるオプション(restart/graceful/stop/graceful-stop)の違いを解説します。

Apache再起動コマンド

「restart」 即時再起動

【コマンド】

apachectl -k restart

「restart」は、Apacheを直ちに再起動するコマンドです。
子プロセスをkill(停止)し、設定ファイルなどの再読込みを行った後、子プロセスを新たに起動します。

restartは、実行中リクエストが存在した場合でも中断し直ちに再起動を行うため、本番環境で実行すると、アクセスしているユーザーの処理が、途中でエラーになる恐れがあるため注意が必要です。

「graceful」リクエスト処理後に再起動

【コマンド】

apachectl -k graceful

「graceful」は緩やかな再起動と呼ばれるように、現在のリクエストが終了した子プロセスから順次、再起動を行うコマンドです。

親プロセスは設定ファイルやログファイルを再読込します。

リクエストが終了した子プロセスは停止され、新しい子プロセスに置き換えられ、設定ファイルの変更をお行った場合は、新しい子プロセスに順次に適用されていきます。

このようにgracefulは、WEBサーバー停止させずにApacheを再起動するコマンドです。本番環境などでApacheを再起動する時は、極力gracefulで再起動するようにしましょう。

gracefulで再起動を行う際、設定ファイル不備があると再起動が行われずApacheが停止します。再起動前にapachectl -tなどのコマンドを使用して、設定ファイルのチェックしておくようにしましょう!

スポンサーリンク

Apache停止コマンド

「stop」 即時停止

【コマンド】

apachectl -k stop

「stop」は、Apacheを直ちに停止するコマンドです。

子プロセスをkill(停止)し、その後、親プロセスも終了させます。

実行中リクエストが存在した場合でも中断し直ちにApacheを終了するため、本番環境で実行すると、アクセスしているユーザーの処理が、途中でエラーになる恐れがあるため注意が必要です。

「graceful-stop」リクエスト処理後に停止

【コマンド】

apachectl -k graceful-stop

「graceful-stop」は緩やかな停止と呼ばれるように、現在のリクエストがすべて終了してからApacheを停止させるコマンドです。

処理中のリクエストがなければ、直ちに子プロセスへの終了シグナルを送信し、親プロセスを終了させApacheを停止します。

ただし、GracefulShutdownTimeoutで指定された時間を過ぎても終了しない場合は、TERMシグナルが送信され、子プロセス・親プロセスを強制的に終了します。

GracefulShutdownTimeoutには、graceful-stopでApacheの停止を指示してから、強制終了させるまでの時間を秒(seconds)単位で指定ます。

ちなみに、デフォルト値は0で、0を指定すると、すべてのリクエストが終了するまでApacheは終了しません。つまり、デフォルト設定でgraceful-stopコマンドを送信すると、リクエストがすべて終了するまで、Apacheの終了が待機されます。

stop / restart よりも、graceful-stop / gracefulを

apachectlで、Apacheを再起動、停止するコマンドの使い方について紹介しました。

基本的には、リクエストの終了を待ってからApacheを停止・再起動するgraceful-stopgracefulを使った方が、アクセス中のユーザーがエラーにならず、優しい運用方法と言えるでしょう。

LinuxのOSコマンドで、Apache起動・停止・再起動する方法は、次の記事で紹介していますので、良かったらどうぞ
【関連記事】
Apacheの再起動/起動/停止コマンドをOS別(Ubuntu・CentOS・Debian・RHEL)に解説!

スポンサーリンク

QooQ