0d419faf71b4d392a596273bd6cc6db401bf6ab7yoshiki<?xml-stylesheet type="text/xsl" href="/style/manual.ja.xsl"?>
19e8b55a6c4a9153b521816effe95db9acab16d0takashi<!-- English Revision: 1174747 -->
031b91a62d25106ae69d4693475c79618dd5e884fielding Licensed to the Apache Software Foundation (ASF) under one or more
031b91a62d25106ae69d4693475c79618dd5e884fielding contributor license agreements. See the NOTICE file distributed with
031b91a62d25106ae69d4693475c79618dd5e884fielding this work for additional information regarding copyright ownership.
031b91a62d25106ae69d4693475c79618dd5e884fielding The ASF licenses this file to You under the Apache License, Version 2.0
031b91a62d25106ae69d4693475c79618dd5e884fielding (the "License"); you may not use this file except in compliance with
031b91a62d25106ae69d4693475c79618dd5e884fielding the License. You may obtain a copy of the License at
acc36ab93565d2880447d535da6ca6e5feac7a70nd Unless required by applicable law or agreed to in writing, software
acc36ab93565d2880447d535da6ca6e5feac7a70nd distributed under the License is distributed on an "AS IS" BASIS,
acc36ab93565d2880447d535da6ca6e5feac7a70nd WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
acc36ab93565d2880447d535da6ca6e5feac7a70nd See the License for the specific language governing permissions and
acc36ab93565d2880447d535da6ca6e5feac7a70nd limitations under the License.
208651a016b098f4fa1f6279559f104d70f1632dtakashi <p>この文書では Unix に類似したシステムでの
19e8b55a6c4a9153b521816effe95db9acab16d0takashi Apache HTTP Serverの停止と再起動について扱っています。
208651a016b098f4fa1f6279559f104d70f1632dtakashi Windows NT, 2000, XP ユーザは<a
208651a016b098f4fa1f6279559f104d70f1632dtakashi href="platform/windows.html#winsvc">サービスとして
208651a016b098f4fa1f6279559f104d70f1632dtakashi href="platform/windows.html#wincons">コンソールアプリケーションとして
19e8b55a6c4a9153b521816effe95db9acab16d0takashi httpd を実行する</a>で、
208651a016b098f4fa1f6279559f104d70f1632dtakashi これらのプラットホームでの使用方法をご覧下さい。</p>
11b88e5476dfb8807d3fbfc280b0ac6ea6fa53e8takashi<seealso><a href="invoking.html">Starting</a></seealso>
19e8b55a6c4a9153b521816effe95db9acab16d0takashi <p>Apache HTTP Server を停止したり再起動したりするためには、実行されている
208651a016b098f4fa1f6279559f104d70f1632dtakashi シグナルを送るには二つの方法があります。
208651a016b098f4fa1f6279559f104d70f1632dtakashi コマンドを使用する方法です。
208651a016b098f4fa1f6279559f104d70f1632dtakashi 実行されているのに気が付くでしょうが、シグナルを送るのは
208651a016b098f4fa1f6279559f104d70f1632dtakashi 親プロセスだけで、それ以外の個々のプロセスには
208651a016b098f4fa1f6279559f104d70f1632dtakashi シグナルを送らないで下さい。その親プロセスの pid は
208651a016b098f4fa1f6279559f104d70f1632dtakashi に書かれています。これはつまり、親以外のプロセスに
208651a016b098f4fa1f6279559f104d70f1632dtakashi シグナルを送る必要すらない、ということです。
11b88e5476dfb8807d3fbfc280b0ac6ea6fa53e8takashi 親プロセスに送ることができる 4 種類のシグナルがあります:
208651a016b098f4fa1f6279559f104d70f1632dtakashi です。これらの説明については続きをご覧下さい。</p>
208651a016b098f4fa1f6279559f104d70f1632dtakashi <p>親プロセスにシグナルを送るには、
208651a016b098f4fa1f6279559f104d70f1632dtakashi 次のようなコマンドを発行して下さい:</p>
498e8a909bc308283d3713bb348246fe51de059cyoshiki<example>kill -TERM `cat /usr/local/apache2/logs/httpd.pid`</example>
208651a016b098f4fa1f6279559f104d70f1632dtakashi 下で説明されているように、<code>stop</code>, <code>restart</code>,
11b88e5476dfb8807d3fbfc280b0ac6ea6fa53e8takashi <code>graceful</code>, <code>graceful-stop</code> を指定できます。
208651a016b098f4fa1f6279559f104d70f1632dtakashi 実行状況を次のコマンドで読むことができます:</p>
498e8a909bc308283d3713bb348246fe51de059cyoshiki<example>tail -f /usr/local/apache2/logs/error_log</example>
208651a016b098f4fa1f6279559f104d70f1632dtakashi <p>ここに挙げた例は、各自の
208651a016b098f4fa1f6279559f104d70f1632dtakashi の設定に適合するように適宜修正して下さい。</p>
208651a016b098f4fa1f6279559f104d70f1632dtakashi シグナルを親プロセスに送ると、即座に子プロセス全てを kill しようとします。
208651a016b098f4fa1f6279559f104d70f1632dtakashi 子プロセスを完全に kill し終わるまでに数秒かかるかもしれません。
208651a016b098f4fa1f6279559f104d70f1632dtakashi その後、親プロセス自身が終了します。
208651a016b098f4fa1f6279559f104d70f1632dtakashi 処理中のリクエストは全て停止され、もはやリクエストに対する
208651a016b098f4fa1f6279559f104d70f1632dtakashi 応答はされません。</p>
208651a016b098f4fa1f6279559f104d70f1632dtakashi <p>親プロセスは <code>USR1</code> あるいは <code>graceful</code>
208651a016b098f4fa1f6279559f104d70f1632dtakashi シグナルを受け取ると、子プロセスに現在のリクエストの処理の後に終了する
208651a016b098f4fa1f6279559f104d70f1632dtakashi (あるいは何もしていなければすぐに終了する)
208651a016b098f4fa1f6279559f104d70f1632dtakashi 親プロセスは設定ファイルを再読込して、ログファイルを開き直します。
208651a016b098f4fa1f6279559f104d70f1632dtakashi 子プロセスが徐々になくなるに従って、
208651a016b098f4fa1f6279559f104d70f1632dtakashi そして、これらが新たなリクエストに即座に応答し始めます。</p>
208651a016b098f4fa1f6279559f104d70f1632dtakashi <p>このコードは常に
208651a016b098f4fa1f6279559f104d70f1632dtakashi MPM のプロセス制御ディレクティブの設定を重視しますので、
208651a016b098f4fa1f6279559f104d70f1632dtakashi クライアントのリクエストを扱うプロセスとスレッドの数を再起動の処理中も
208651a016b098f4fa1f6279559f104d70f1632dtakashi 適切な値に維持されます。。また、次のようにして
0d419faf71b4d392a596273bd6cc6db401bf6ab7yoshiki <directive module="mpm_common">StartServers</directive>
208651a016b098f4fa1f6279559f104d70f1632dtakashi 少なくとも 1 秒後に <directive
208651a016b098f4fa1f6279559f104d70f1632dtakashi module="mpm_common">StartServers</directive> 個の新しい子プロセスが
208651a016b098f4fa1f6279559f104d70f1632dtakashi 生成されていなければ、その数になるように適宜プロセスを生成します。
208651a016b098f4fa1f6279559f104d70f1632dtakashi この挙動は現在の負荷に対して適切な子プロセスの数と
208651a016b098f4fa1f6279559f104d70f1632dtakashi module="mpm_common">StartServers</directive> パラメータでの
208651a016b098f4fa1f6279559f104d70f1632dtakashi 希望の数の両方を維持しようとしています。</p>
208651a016b098f4fa1f6279559f104d70f1632dtakashi サーバが新しいリクエストに応答不能な時間を最小にするように
208651a016b098f4fa1f6279559f104d70f1632dtakashi (リクエストは OS によってキューに追加されるので絶対に紛失はしません)、
208651a016b098f4fa1f6279559f104d70f1632dtakashi また同時に、希望のチューニングパラメータを守るように
208651a016b098f4fa1f6279559f104d70f1632dtakashi コードは書かれています。
208651a016b098f4fa1f6279559f104d70f1632dtakashi このようにするために、世代をまたがった全子プロセスの追跡に使われている
208651a016b098f4fa1f6279559f104d70f1632dtakashi <p>status モジュールは、緩やかな再起動以前から開始して
208651a016b098f4fa1f6279559f104d70f1632dtakashi リクエストに応答し続けている子プロセスを特定するために、
208651a016b098f4fa1f6279559f104d70f1632dtakashi 再起動前の子プロセスがログを書き終わったことを確証する方法が
208651a016b098f4fa1f6279559f104d70f1632dtakashi ありません。古いログに対して何かする前に、
208651a016b098f4fa1f6279559f104d70f1632dtakashi 提案します。例えば、帯域の狭い通信路のユーザのリクエストのほとんどが 10
208651a016b098f4fa1f6279559f104d70f1632dtakashi 分以下で完了しているということが分かっていれば、
208651a016b098f4fa1f6279559f104d70f1632dtakashi 古いログに何かする前に 15 分待つということです。</p>
11b88e5476dfb8807d3fbfc280b0ac6ea6fa53e8takashi 設定ファイルに (構文上の) 誤りがないかチェックされます。
11b88e5476dfb8807d3fbfc280b0ac6ea6fa53e8takashi 誤りがあった場合エラーメッセージでその旨が示され、サーバは再起動されません。
11b88e5476dfb8807d3fbfc280b0ac6ea6fa53e8takashi こうすることでサーバが終了しているけれども再起動できないという状況を
11b88e5476dfb8807d3fbfc280b0ac6ea6fa53e8takashi 防ぎ、サーバが機能不全な状態になるのを防いでいます。</p>
11b88e5476dfb8807d3fbfc280b0ac6ea6fa53e8takashi <p>ただしこれでもサーバが正しく再起動することは保証されません。
208651a016b098f4fa1f6279559f104d70f1632dtakashi 設定ファイルの意味的な内容を構文と同様に検証したい場合は、
208651a016b098f4fa1f6279559f104d70f1632dtakashi 非 root ユーザで <program>httpd</program> を起動しようとすればわかります。
208651a016b098f4fa1f6279559f104d70f1632dtakashi もしエラーがなければ、ソケットやログを開こうとして
208651a016b098f4fa1f6279559f104d70f1632dtakashi が既に必要なポートにバインドしているため)
208651a016b098f4fa1f6279559f104d70f1632dtakashi これ以外の理由で起動に失敗したのであれば、
208651a016b098f4fa1f6279559f104d70f1632dtakashi それは設定ファイルのエラーで、
11b88e5476dfb8807d3fbfc280b0ac6ea6fa53e8takashi 緩やかな再起動を行う前にその誤りを修正しなければなりません。</p>
208651a016b098f4fa1f6279559f104d70f1632dtakashi <p><code>HUP</code> あるいは <code>restart</code> シグナルを親プロセスに送ると、
208651a016b098f4fa1f6279559f104d70f1632dtakashi 親プロセスは終了しません。
208651a016b098f4fa1f6279559f104d70f1632dtakashi 設定ファイルを再読込して、ログファイル全てを開き直します。
208651a016b098f4fa1f6279559f104d70f1632dtakashi その後、新しい子プロセスを起動して応答を続けます。</p>
208651a016b098f4fa1f6279559f104d70f1632dtakashi サーバ統計がゼロに設定されることに注意してください。</p>
11b88e5476dfb8807d3fbfc280b0ac6ea6fa53e8takashi <note>graceful 再起動時は、再起動前に構文チェックが行われます。
11b88e5476dfb8807d3fbfc280b0ac6ea6fa53e8takashi もし構文エラーがあればその旨が示され、再起動は行われません。</note>
11b88e5476dfb8807d3fbfc280b0ac6ea6fa53e8takashi <p><code>WINCH</code> や <code>graceful-stop</code> シグナルを受け取ると、
11b88e5476dfb8807d3fbfc280b0ac6ea6fa53e8takashi 親プロセスは子プロセスに現在処理中のリクエストの後に終了する
11b88e5476dfb8807d3fbfc280b0ac6ea6fa53e8takashi (あるいは処理中のものが何もなければ直ちに終了する)
11b88e5476dfb8807d3fbfc280b0ac6ea6fa53e8takashi その後親プロセスは <directive module="mpm_common">PidFile</directive>
11b88e5476dfb8807d3fbfc280b0ac6ea6fa53e8takashi を削除し、ポートでの Listen を全て停止します。
11b88e5476dfb8807d3fbfc280b0ac6ea6fa53e8takashi 親プロセスはどの子プロセスがリクエスト処理中かを監視し続けています。
11b88e5476dfb8807d3fbfc280b0ac6ea6fa53e8takashi 全ての子プロセスが終了するか
11b88e5476dfb8807d3fbfc280b0ac6ea6fa53e8takashi <directive module="mpm_common">GracefulShutdownTimeout</directive>
11b88e5476dfb8807d3fbfc280b0ac6ea6fa53e8takashi で設定した時間が過ぎると、親プロセスも終了します。
11b88e5476dfb8807d3fbfc280b0ac6ea6fa53e8takashi シグナルが送信され強制的に終了されます。</p>
11b88e5476dfb8807d3fbfc280b0ac6ea6fa53e8takashi 親プロセスも子プロセスもすぐに終了します。しかしながら
11b88e5476dfb8807d3fbfc280b0ac6ea6fa53e8takashi <note><p><code>graceful-stop</code> を使うとまったく同一に設定された
19e8b55a6c4a9153b521816effe95db9acab16d0takashi httpd を緩やかにアップグレードするのにはとても便利ですが、
11b88e5476dfb8807d3fbfc280b0ac6ea6fa53e8takashi 設定ファイルによってはデッドロックやレースコンディションを
11b88e5476dfb8807d3fbfc280b0ac6ea6fa53e8takashi 引き起こすこともあります。</p>
19e8b55a6c4a9153b521816effe95db9acab16d0takashi <p>ディスク上のファイルを使うもの、たとえばロックファイル
19e8b55a6c4a9153b521816effe95db9acab16d0takashi (<directive module="core">Mutex</directive>) や Unix ソケットファイル
19e8b55a6c4a9153b521816effe95db9acab16d0takashi (<directive module="mod_cgid">ScriptSock</directive>)
19e8b55a6c4a9153b521816effe95db9acab16d0takashi などはサーバの PID を含めて管理されていて、
11b88e5476dfb8807d3fbfc280b0ac6ea6fa53e8takashi 共存できるよう注意が払われています。
11b88e5476dfb8807d3fbfc280b0ac6ea6fa53e8takashi しかしその他設定ディレクティブやサードパーティ製のモジュール、
11b88e5476dfb8807d3fbfc280b0ac6ea6fa53e8takashi CGI ユーティリティのパーシステント層などで
11b88e5476dfb8807d3fbfc280b0ac6ea6fa53e8takashi ディスク上にロックファイルや状態管理ファイルを
11b88e5476dfb8807d3fbfc280b0ac6ea6fa53e8takashi が互いに衝突しないように気をつけなければなりません。</p>
11b88e5476dfb8807d3fbfc280b0ac6ea6fa53e8takashi その他潜在的なレースコンディションについても注意しなければなりません。
11b88e5476dfb8807d3fbfc280b0ac6ea6fa53e8takashi rotate しようとすると、互いにログファイルを破壊してしまいます。</p>
0d419faf71b4d392a596273bd6cc6db401bf6ab7yoshiki</manualpage>