]> granicus.if.org Git - apache/blob - docs/manual/stopping.xml.ja
xforms
[apache] / docs / manual / stopping.xml.ja
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:1174747 (outdated) -->
5
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
13
14      http://www.apache.org/licenses/LICENSE-2.0
15
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 -->
22
23 <manualpage metafile="stopping.xml.meta">
24
25   <title>停止と再起動</title>
26
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>
37
38 <seealso><program>httpd</program></seealso>
39 <seealso><program>apachectl</program></seealso>
40 <seealso><a href="invoking.html">Starting</a></seealso>
41
42 <section id="introduction"><title>イントロダクション</title>
43
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>
62
63     <p>親プロセスにシグナルを送るには、
64     次のようなコマンドを発行して下さい:</p>
65
66 <example>kill -TERM `cat /usr/local/apache2/logs/httpd.pid`</example>
67
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>
75
76     <p><program>httpd</program> にシグナルを送った後、
77     実行状況を次のコマンドで読むことができます:</p>
78
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>
86
87 <section id="term"><title>急な停止</title>
88
89 <dl><dt>シグナル: TERM</dt>
90 <dd><code>apachectl -k stop</code></dd>
91 </dl>
92
93     <p><code>TERM</code> あるいは <code>stop</code> 
94     シグナルを親プロセスに送ると、即座に子プロセス全てを kill しようとします。
95     子プロセスを完全に kill し終わるまでに数秒かかるかもしれません。
96     その後、親プロセス自身が終了します。
97     処理中のリクエストは全て停止され、もはやリクエストに対する
98     応答はされません。</p>
99 </section>
100
101 <section id="graceful"><title>緩やかな再起動</title>
102
103 <dl><dt>シグナル: USR1</dt>
104 <dd><code>apachectl -k graceful</code></dd>
105 </dl>
106
107     <p>親プロセスは <code>USR1</code> あるいは <code>graceful</code>
108     シグナルを受け取ると、子プロセスに現在のリクエストの処理の後に終了する
109     (あるいは何もしていなければすぐに終了する)
110     ように<em>助言</em>します。
111     親プロセスは設定ファイルを再読込して、ログファイルを開き直します。
112     子プロセスが徐々になくなるに従って、
113     新しい<em>世代</em>の設定による子プロセスに置き換えていきます。
114     そして、これらが新たなリクエストに即座に応答し始めます。</p>
115
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>
129
130     <p><module>mod_status</module> を
131     使用している場合は、<code>USR1</code> シグナルが送られた際に
132     サーバ統計がゼロに<strong>設定されない</strong>ことに
133     注意してください。
134     サーバが新しいリクエストに応答不能な時間を最小にするように
135     (リクエストは OS によってキューに追加されるので絶対に紛失はしません)、
136     また同時に、希望のチューニングパラメータを守るように
137     コードは書かれています。
138     このようにするために、世代をまたがった全子プロセスの追跡に使われている
139     <em>スコアボード</em>を維持しなければなりません。</p>
140
141     <p>status モジュールは、緩やかな再起動以前から開始して
142     リクエストに応答し続けている子プロセスを特定するために、
143     <code>G</code> を使うこともします。</p>
144
145     <p>現在、<code>USR1</code> を使うログ移動スクリプトでは、
146     再起動前の子プロセスがログを書き終わったことを確証する方法が
147     ありません。古いログに対して何かする前に、
148     <code>USR1</code> シグナルを送った後いくらか適当な時間待つことを
149     提案します。例えば、帯域の狭い通信路のユーザのリクエストのほとんどが 10 
150     分以下で完了しているということが分かっていれば、
151     古いログに何かする前に 15 分待つということです。</p>
152
153     <note><p>再起動が発行されると設定ファイルの構文チェックがまず走り、
154     設定ファイルに (構文上の) 誤りがないかチェックされます。
155     誤りがあった場合エラーメッセージでその旨が示され、サーバは再起動されません。
156     こうすることでサーバが終了しているけれども再起動できないという状況を
157     防ぎ、サーバが機能不全な状態になるのを防いでいます。</p>
158
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>
172
173 <section id="hup"><title>急な再起動</title>
174
175 <dl><dt>シグナル: HUP</dt>
176 <dd><code>apachectl -k restart</code></dd>
177 </dl>
178
179     <p><code>HUP</code> あるいは <code>restart</code> シグナルを親プロセスに送ると、
180     <code>TERM</code> と同様に子プロセスを kill しますが、
181     親プロセスは終了しません。
182     設定ファイルを再読込して、ログファイル全てを開き直します。
183     その後、新しい子プロセスを起動して応答を続けます。</p>
184
185     <p><module>mod_status</module>
186     を使っている場合は、<code>HUP</code> が送られた場合に
187     サーバ統計がゼロに設定されることに注意してください。</p>
188
189     <note>graceful 再起動時は、再起動前に構文チェックが行われます。
190     もし構文エラーがあればその旨が示され、再起動は行われません。</note>
191 </section>
192
193 <section id="gracefulstop"><title>緩やかな停止</title>
194
195 <dl><dt>Signal: WINCH</dt>
196 <dd><code>apachectl -k graceful-stop</code></dd>
197 </dl>
198
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>
211     
212     <p>"graceful" 状態の場合 <code>TERM</code> シグナルを受け取ると、
213     親プロセスも子プロセスもすぐに終了します。しかしながら
214     <directive module="mpm_common">PidFile</directive>
215     が削除されてしまっているので、<code>apachectl</code>
216     や <code>httpd</code> にこのシグナルを送ることはできません。</p>
217
218     <note><p><code>graceful-stop</code> を使うとまったく同一に設定された
219     複数の <program>httpd</program> を同時に実行することができます。
220     Apache を緩やかにアップグレードするのにはとても便利ですが、
221     設定ファイルによってはデッドロックやレースコンディションを
222     引き起こすこともあります。</p>
223
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>
234
235     <p><program>rotatelogs</program> 形式のパイプを使ったログといった、
236     その他潜在的なレースコンディションについても注意しなければなりません。
237     複数の <program>rotatelogs</program> が同じファイルを同時に
238     rotate しようとすると、互いにログファイルを破壊してしまいます。</p>
239     </note>
240 </section>
241
242 </manualpage>