Moved apache code into a folder to help prepare for packaging where we dont want...
[httpd-crcsyncproxy.git] / apache / docs / manual / stopping.xml.ja
blob477e84faad23e9a7fa7da3e93a5e787f6977ff86
1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
3 <?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
4 <!-- English Revision: 655319 -->
6 <!--
7 Licensed to the Apache Software Foundation (ASF) under one or more
8 contributor license agreements. See the NOTICE file distributed with
9 this work for additional information regarding copyright ownership.
10 The ASF licenses this file to You under the Apache License, Version 2.0
11 (the "License"); you may not use this file except in compliance with
12 the License. You may obtain a copy of the License at
14 http://www.apache.org/licenses/LICENSE-2.0
16 Unless required by applicable law or agreed to in writing, software
17 distributed under the License is distributed on an "AS IS" BASIS,
18 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19 See the License for the specific language governing permissions and
20 limitations under the License.
21 -->
23 <manualpage metafile="stopping.xml.meta">
25 <title>停止と再起動</title>
27 <summary>
28 <p>この文書では Unix に類似したシステムでの
29 Apache の停止と再起動について扱っています。
30 Windows NT, 2000, XP ユーザは<a
31 href="platform/windows.html#winsvc">サービスとして
32 Apache を実行する</a>で、Windows 9x, MEユーザは<a
33 href="platform/windows.html#wincons">コンソールアプリケーションとして
34 Apache を実行する</a>で、
35 これらのプラットホームでの使用方法をご覧下さい。</p>
36 </summary>
38 <seealso><program>httpd</program></seealso>
39 <seealso><program>apachectl</program></seealso>
40 <seealso><a href="invoking.html">Starting</a></seealso>
42 <section id="introduction"><title>イントロダクション</title>
44 <p>Apache を停止したり再起動したりするためには、実行されている
45 <program>httpd</program> プロセスにシグナルを送る必要があります。
46 シグナルを送るには二つの方法があります。
47 一つ目はプロセスに直接シグナルを送る unix の <code>kill</code>
48 コマンドを使用する方法です。
49 システムを見ればたくさんの <program>httpd</program>
50 実行されているのに気が付くでしょうが、シグナルを送るのは
51 親プロセスだけで、それ以外の個々のプロセスには
52 シグナルを送らないで下さい。その親プロセスの pid は
53 <directive module="mpm_common">PidFile</directive>
54 に書かれています。これはつまり、親以外のプロセスに
55 シグナルを送る必要すらない、ということです。
56 親プロセスに送ることができる 4 種類のシグナルがあります:
57 <code><a href="#term">TERM</a></code>,
58 <code><a href="#hup">HUP</a></code>,
59 <code><a href="#graceful">USR1</a></code>,
60 <code><a href="#gracefulstop">WINCH</a></code>
61 です。これらの説明については続きをご覧下さい。</p>
63 <p>親プロセスにシグナルを送るには、
64 次のようなコマンドを発行して下さい:</p>
66 <example>kill -TERM `cat /usr/local/apache2/logs/httpd.pid`</example>
68 <p><program>httpd</program> プロセスにシグナルを送る 2 番目の方法は
69 <code>-k</code> というコマンドライン引数を使用することです。
70 下で説明されているように、<code>stop</code>, <code>restart</code>,
71 <code>graceful</code>, <code>graceful-stop</code> を指定できます。
72 これらは <program>httpd</program> の引数ですが、
73 制御用のスクリプト <program>apachectl</program> はそれらの引数をそのまま
74 <program>httpd</program> に渡します。</p>
76 <p><program>httpd</program> にシグナルを送った後、
77 実行状況を次のコマンドで読むことができます:</p>
79 <example>tail -f /usr/local/apache2/logs/error_log</example>
80 <p>ここに挙げた例は、各自の
81 <directive module="core">ServerRoot</directive>
82
83 <directive module="mpm_common">PidFile</directive>
84 の設定に適合するように適宜修正して下さい。</p>
85 </section>
87 <section id="term"><title>急な停止</title>
89 <dl><dt>シグナル: TERM</dt>
90 <dd><code>apachectl -k stop</code></dd>
91 </dl>
93 <p><code>TERM</code> あるいは <code>stop</code>
94 シグナルを親プロセスに送ると、即座に子プロセス全てを kill しようとします。
95 子プロセスを完全に kill し終わるまでに数秒かかるかもしれません。
96 その後、親プロセス自身が終了します。
97 処理中のリクエストは全て停止され、もはやリクエストに対する
98 応答はされません。</p>
99 </section>
101 <section id="graceful"><title>緩やかな再起動</title>
103 <dl><dt>シグナル: USR1</dt>
104 <dd><code>apachectl -k graceful</code></dd>
105 </dl>
107 <p>親プロセスは <code>USR1</code> あるいは <code>graceful</code>
108 シグナルを受け取ると、子プロセスに現在のリクエストの処理の後に終了する
109 (あるいは何もしていなければすぐに終了する)
110 ように<em>助言</em>します。
111 親プロセスは設定ファイルを再読込して、ログファイルを開き直します。
112 子プロセスが徐々になくなるに従って、
113 新しい<em>世代</em>の設定による子プロセスに置き換えていきます。
114 そして、これらが新たなリクエストに即座に応答し始めます。</p>
116 <p>このコードは常に
117 MPM のプロセス制御ディレクティブの設定を重視しますので、
118 クライアントのリクエストを扱うプロセスとスレッドの数を再起動の処理中も
119 適切な値に維持されます。。また、次のようにして
120 <directive module="mpm_common">StartServers</directive>
121 を守ります:
122 少なくとも 1 秒後に <directive
123 module="mpm_common">StartServers</directive> 個の新しい子プロセスが
124 生成されていなければ、その数になるように適宜プロセスを生成します。
125 この挙動は現在の負荷に対して適切な子プロセスの数と
126 <directive
127 module="mpm_common">StartServers</directive> パラメータでの
128 希望の数の両方を維持しようとしています。</p>
130 <p><module>mod_status</module>
131 使用している場合は、<code>USR1</code> シグナルが送られた際に
132 サーバ統計がゼロに<strong>設定されない</strong>ことに
133 注意してください。
134 サーバが新しいリクエストに応答不能な時間を最小にするように
135 (リクエストは OS によってキューに追加されるので絶対に紛失はしません)、
136 また同時に、希望のチューニングパラメータを守るように
137 コードは書かれています。
138 このようにするために、世代をまたがった全子プロセスの追跡に使われている
139 <em>スコアボード</em>を維持しなければなりません。</p>
141 <p>status モジュールは、緩やかな再起動以前から開始して
142 リクエストに応答し続けている子プロセスを特定するために、
143 <code>G</code> を使うこともします。</p>
145 <p>現在、<code>USR1</code> を使うログ移動スクリプトでは、
146 再起動前の子プロセスがログを書き終わったことを確証する方法が
147 ありません。古いログに対して何かする前に、
148 <code>USR1</code> シグナルを送った後いくらか適当な時間待つことを
149 提案します。例えば、帯域の狭い通信路のユーザのリクエストのほとんどが 10
150 分以下で完了しているということが分かっていれば、
151 古いログに何かする前に 15 分待つということです。</p>
153 <note><p>再起動が発行されると設定ファイルの構文チェックがまず走り、
154 設定ファイルに (構文上の) 誤りがないかチェックされます。
155 誤りがあった場合エラーメッセージでその旨が示され、サーバは再起動されません。
156 こうすることでサーバが終了しているけれども再起動できないという状況を
157 防ぎ、サーバが機能不全な状態になるのを防いでいます。</p>
159 <p>ただしこれでもサーバが正しく再起動することは保証されません。
160 設定ファイルの意味的な内容を構文と同様に検証したい場合は、
161 非 root ユーザで <program>httpd</program> を起動しようとすればわかります。
162 もしエラーがなければ、ソケットやログを開こうとして
163 root でないため
164 (もしくは実行中の <program>httpd</program>
165 が既に必要なポートにバインドしているため)
166 に失敗するでしょう。
167 これ以外の理由で起動に失敗したのであれば、
168 それは設定ファイルのエラーで、
169 緩やかな再起動を行う前にその誤りを修正しなければなりません。</p>
170 </note>
171 </section>
173 <section id="hup"><title>急な再起動</title>
175 <dl><dt>シグナル: HUP</dt>
176 <dd><code>apachectl -k restart</code></dd>
177 </dl>
179 <p><code>HUP</code> あるいは <code>restart</code> シグナルを親プロセスに送ると、
180 <code>TERM</code> と同様に子プロセスを kill しますが、
181 親プロセスは終了しません。
182 設定ファイルを再読込して、ログファイル全てを開き直します。
183 その後、新しい子プロセスを起動して応答を続けます。</p>
185 <p><module>mod_status</module>
186 を使っている場合は、<code>HUP</code> が送られた場合に
187 サーバ統計がゼロに設定されることに注意してください。</p>
189 <note>graceful 再起動時は、再起動前に構文チェックが行われます。
190 もし構文エラーがあればその旨が示され、再起動は行われません。</note>
191 </section>
193 <section id="gracefulstop"><title>緩やかな停止</title>
195 <dl><dt>Signal: WINCH</dt>
196 <dd><code>apachectl -k graceful-stop</code></dd>
197 </dl>
199 <p><code>WINCH</code><code>graceful-stop</code> シグナルを受け取ると、
200 親プロセスは子プロセスに現在処理中のリクエストの後に終了する
201 (あるいは処理中のものが何もなければ直ちに終了する)
202 ように<em>アドバイス</em>します。
203 その後親プロセスは <directive module="mpm_common">PidFile</directive>
204 を削除し、ポートでの Listen を全て停止します。
205 親プロセスはどの子プロセスがリクエスト処理中かを監視し続けています。
206 全ての子プロセスが終了するか
207 <directive module="mpm_common">GracefulShutdownTimeout</directive>
208 で設定した時間が過ぎると、親プロセスも終了します。
209 タイムアウトに達した場合、残りの子プロセスには <code>TERM</code>
210 シグナルが送信され強制的に終了されます。</p>
212 <p>"graceful" 状態の場合 <code>TERM</code> シグナルを受け取ると、
213 親プロセスも子プロセスもすぐに終了します。しかしながら
214 <directive module="mpm_common">PidFile</directive>
215 が削除されてしまっているので、<code>apachectl</code>
216 <code>httpd</code> にこのシグナルを送ることはできません。</p>
218 <note><p><code>graceful-stop</code> を使うとまったく同一に設定された
219 複数の <program>httpd</program> を同時に実行することができます。
220 Apache を緩やかにアップグレードするのにはとても便利ですが、
221 設定ファイルによってはデッドロックやレースコンディションを
222 引き起こすこともあります。</p>
224 <p>ディスク上のファイルを使うもの、たとえば
225 <directive module="core">Lockfile</directive>
226 <directive module="mod_cgid">ScriptSock</directive>
227 のファイルなどはサーバの PID を含めて管理されていて、
228 共存できるよう注意が払われています。
229 しかしその他設定ディレクティブやサードパーティ製のモジュール、
230 CGI ユーティリティのパーシステント層などで
231 ディスク上にロックファイルや状態管理ファイルを
232 使っている場合は、実行されている複数の <program>httpd</program>
233 が互いに衝突しないように気をつけなければなりません。</p>
235 <p><program>rotatelogs</program> 形式のパイプを使ったログといった、
236 その他潜在的なレースコンディションについても注意しなければなりません。
237 複数の <program>rotatelogs</program> が同じファイルを同時に
238 rotate しようとすると、互いにログファイルを破壊してしまいます。</p>
239 </note>
240 </section>
242 </manualpage>