この文書では Unix に類似したシステムでの Apache の停止と再起動について扱っています。 Windows NT, 2000, XP ユーザはサービスとして Apache を実行するで、Windows 9x, MEユーザはコンソールアプリケーションとして Apache を実行するで、 これらのプラットホームでの使用方法をご覧下さい。
Apache を停止したり再起動したりするためには、実行されている
kill
コマンドを使用する方法です。
システムを見ればたくさんの TERM,
HUP,
USR1
です。これらの説明については続きをご覧下さい。
親プロセスにシグナルを送るには、 次のようなコマンドを発行して下さい:
-k というコマンドライン引数を使用することです。
下で説明されているように、stop, restart,
graceful, graceful-stop を指定できます。
これらは
ここに挙げた例は、各自の
apachectl -k stopTERM あるいは stop
シグナルを親プロセスに送ると、即座に子プロセス全てを kill しようとします。
子プロセスを完全に kill し終わるまでに数秒かかるかもしれません。
その後、親プロセス自身が終了します。
処理中のリクエストは全て停止され、もはやリクエストに対する
応答はされません。
apachectl -k graceful親プロセスは USR1 あるいは graceful
シグナルを受け取ると、子プロセスに現在のリクエストの処理の後に終了する
(あるいは何もしていなければすぐに終了する)
ように助言します。
親プロセスは設定ファイルを再読込して、ログファイルを開き直します。
子プロセスが徐々になくなるに従って、
新しい世代の設定による子プロセスに置き換えていきます。
そして、これらが新たなリクエストに即座に応答し始めます。
このコードは常に
MPM のプロセス制御ディレクティブの設定を重視しますので、
クライアントのリクエストを扱うプロセスとスレッドの数を再起動の処理中も
適切な値に維持されます。。また、次のようにして
USR1 シグナルが送られた際に
サーバ統計がゼロに設定されないことに
注意してください。
サーバが新しいリクエストに応答不能な時間を最小にするように
(リクエストは OS によってキューに追加されるので絶対に紛失はしません)、
また同時に、希望のチューニングパラメータを守るように
コードは書かれています。
このようにするために、世代をまたがった全子プロセスの追跡に使われている
スコアボードを維持しなければなりません。
status モジュールは、緩やかな再起動以前から開始して
リクエストに応答し続けている子プロセスを特定するために、
G を使うこともします。
現在、USR1 を使うログ移動スクリプトでは、
再起動前の子プロセスがログを書き終わったことを確証する方法が
ありません。古いログに対して何かする前に、
USR1 シグナルを送った後いくらか適当な時間待つことを
提案します。例えば、帯域の狭い通信路のユーザのリクエストのほとんどが 10
分以下で完了しているということが分かっていれば、
古いログに何かする前に 15 分待つということです。
-t
コマンドライン引数
(apachectl -k restartHUP あるいは restart シグナルを親プロセスに送ると、
TERM と同様に子プロセスを kill しますが、
親プロセスは終了しません。
設定ファイルを再読込して、ログファイル全てを開き直します。
その後、新しい子プロセスを起動して応答を続けます。
HUP が送られた場合に
サーバ統計がゼロに設定されることに注意してください。
apachectl -k graceful-stop親プロセスは WINCH あるいは graceful-stop
シグナルを受け取ると、子プロセスに現在のリクエストの処理の後に終了する
(あるいは何もしていなければすぐに終了する)
ように助言します。
その後に親プロセスは TERM
シグナルが送信され、強制終了されます。
TERM シグナルによって、"graceful" 状態にある親プロセスと
子プロセスの全てが直ちに終了します。ただし、
apachectl や httpd
でこれらにシグナルを送ることはできません。
graceful-stop シグナルを使うと、まったく同一の設定
ファイルを使った
潜在的な競合状態についても心配する必要があるでしょう。
たとえば