GCS Amplitude
GCS Amplitude

Apache HTTP Server の停止と再起動

に書かれています。これはつまり、親以外のプロセスに シグナルを送る必要すらない、ということです。 親プロセスに送ることができる 4 種類のシグナルがあります: PidFile

kill -TERM cat /usr/local/apache2/logs/httpd.pid``

プロセスにシグナルを送る 2 番目の方法は httpd-k

tail -f /usr/local/apache2/logs/error_log

シグナルを親プロセスに送ると、即座に子プロセス全てを kill しようとします。 子プロセスを完全に kill し終わるまでに数秒かかるかもしれません。 その後、親プロセス自身が終了します。 処理中のリクエストは全て停止され、もはやリクエストに対する 応答はされません。

このコードは常に MPM のプロセス制御ディレクティブの設定を重視しますので、 クライアントのリクエストを扱うプロセスとスレッドの数を再起動の処理中も 適切な値に維持されます。。また、次のようにして

を守ります: 少なくとも 1 秒後に StartServers

個の新しい子プロセスが 生成されていなければ、その数になるように適宜プロセスを生成します。 この挙動は現在の負荷に対して適切な子プロセスの数と StartServers

status モジュールは、緩やかな再起動以前から開始して リクエストに応答し続けている子プロセスを特定するために、 G

を使うログ移動スクリプトでは、 再起動前の子プロセスがログを書き終わったことを確証する方法が ありません。古いログに対して何かする前に、 USR1

シグナルを送った後いくらか適当な時間待つことを 提案します。例えば、帯域の狭い通信路のユーザのリクエストのほとんどが 10 分以下で完了しているということが分かっていれば、 古いログに何かする前に 15 分待つということです。

再起動が発行されると設定ファイルの構文チェックがまず走り、 設定ファイルに (構文上の) 誤りがないかチェックされます。 誤りがあった場合エラーメッセージでその旨が示され、サーバは再起動されません。 こうすることでサーバが終了しているけれども再起動できないという状況を 防ぎ、サーバが機能不全な状態になるのを防いでいます。

ただしこれでもサーバが正しく再起動することは保証されません。 設定ファイルの意味的な内容を構文と同様に検証したい場合は、 非 root ユーザで

を起動しようとすればわかります。 もしエラーがなければ、ソケットやログを開こうとして root でないため (もしくは実行中の httpd

が既に必要なポートにバインドしているため) に失敗するでしょう。 これ以外の理由で起動に失敗したのであれば、 それは設定ファイルのエラーで、 緩やかな再起動を行う前にその誤りを修正しなければなりません。httpd

を同時に実行することができます。 httpd を緩やかにアップグレードするのにはとても便利ですが、 設定ファイルによってはデッドロックやレースコンディションを 引き起こすこともあります。httpd

) や Unix ソケットファイル (Mutex

形式のパイプを使ったログといった、 その他潜在的なレースコンディションについても注意しなければなりません。 複数の rotatelogs

が同じファイルを同時に rotate しようとすると、互いにログファイルを破壊してしまいます。rotatelogs

モジュール | ディレクティブ | FAQ | 用語 | サイトマップ

Apache HTTP サーバ バージョン 2.4

Apache HTTP Server の停止と再起動

翻訳済み言語: de | en | es | fr | ja | ko | tr

イントロダクション

Apache HTTP Server を停止したり再起動したりするためには、実行されている httpd プロセスにシグナルを送る必要があります。 シグナルを送るには二つの方法があります。 一つ目はプロセスに直接シグナルを送る unix の kill コマンドを使用する方法です。 システムを見ればたくさんの httpd が 実行されているのに気が付くでしょうが、シグナルを送るのは 親プロセスだけで、それ以外の個々のプロセスには シグナルを送らないで下さい。その親プロセスの pid は PidFile に書かれています。これはつまり、親以外のプロセスに シグナルを送る必要すらない、ということです。

緩やかな再起動

親プロセスは USR1 あるいは graceful シグナルを受け取ると、子プロセスに現在のリクエストの処理の後に終了する (あるいは何もしていなければすぐに終了する) ように助言します。 親プロセスは設定ファイルを再読込して、ログファイルを開き直します。 子プロセスが徐々になくなるに従って、 新しい世代の設定による子プロセスに置き換えていきます。 そして、これらが新たなリクエストに即座に応答し始めます。

急な再起動

HUP あるいは restart シグナルを親プロセスに送ると、 TERM と同様に子プロセスを kill しますが、 親プロセスは終了しません。 設定ファイルを再読込して、ログファイル全てを開き直します。 その後、新しい子プロセスを起動して応答を続けます。

緩やかな停止

WINCH や graceful-stop シグナルを受け取ると、 親プロセスは子プロセスに現在処理中のリクエストの後に終了する (あるいは処理中のものが何もなければ直ちに終了する) ようにアドバイスします。 その後親プロセスは PidFile を削除し、ポートでの Listen を全て停止します。 親プロセスはどの子プロセスがリクエスト処理中かを監視し続けています。 全ての子プロセスが終了するか GracefulShutdownTimeout で設定した時間が過ぎると、親プロセスも終了します。 タイムアウトに達した場合、残りの子プロセスには TERM シグナルが送信され強制的に終了されます。