1 <?xml version="1.0" encoding="ISO-8859-1" ?>
2 <!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
3 <?xml-stylesheet type="text/xsl" href="./style/manual.fr.xsl"?>
4 <!-- French translation : Lucien GENTIS -->
5 <!-- Reviewed by : Vincent Deffontaines -->
6 <!-- English Revision : 1174747 -->
9 Licensed to the Apache Software Foundation (ASF) under one or more
10 contributor license agreements. See the NOTICE file distributed with
11 this work for additional information regarding copyright ownership.
12 The ASF licenses this file to You under the Apache License, Version 2.0
13 (the "License"); you may not use this file except in compliance with
14 the License. You may obtain a copy of the License at
16 http://www.apache.org/licenses/LICENSE-2.0
18 Unless required by applicable law or agreed to in writing, software
19 distributed under the License is distributed on an "AS IS" BASIS,
20 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 See the License for the specific language governing permissions and
22 limitations under the License.
25 <manualpage metafile="stopping.xml.meta">
27 <title>Arrêt et redémarrage du serveur HTTP Apache</title>
30 <p>Ce document couvre l'arrêt et le redémarrage du
31 serveur HTTP Apache sur
32 les systèmes Unix et similaires. Les utilisateurs de Windows NT, 2000
33 and XP doivent consulter
34 <a href="platform/windows.html#winsvc">Exécuter httpd en tant que
35 service</a> et les utilisateurs de Windows 9x et ME doivent consulter
36 <a href="platform/windows.html#wincons">Exécuter httpd comme une
37 application de type console</a> pour plus d'informations sur le contrôle
38 de httpd à partir de ces plateformes.</p>
41 <seealso><program>httpd</program></seealso>
42 <seealso><program>apachectl</program></seealso>
43 <seealso><a href="invoking.html">Démarrage</a></seealso>
45 <section id="introduction"><title>Introduction</title>
47 <p>Afin d'arrêter ou redémarrer le serveur HTTP Apache, vous devez envoyer un signal aux
48 processus <program>httpd</program> en cours d'exécution. Les signaux
49 peuvent être envoyés de deux manières. La
50 première méthode consiste à
51 utiliser la commande unix <code>kill</code>
52 pour envoyer directement des signaux aux processus. Vous pouvez remarquer
53 que plusieurs processus <program>httpd</program> s'exécutent sur votre
54 système, mais il vous suffit d'envoyer les signaux au processus parent,
55 dont le PID est enregistré dans le fichier précisé par la directive
56 <directive module="mpm_common">PidFile</directive>. Autrement dit, vous
57 n'aurez jamais besoin d'envoyer des signaux à aucun des
58 processus enfants, mais seulement au processus parent. Quatre types
59 de signaux peuvent être envoyés au processus parent :
60 <code><a href="#term">TERM</a></code>,
61 <code><a href="#graceful">USR1</a></code>,
62 <code><a href="#hup">HUP</a></code>, et
63 <code><a href="#gracefulstop">WINCH</a></code>, qui
64 seront décrit plus loin.</p>
66 <p>Pour envoyer un signal au processus parent, vous devez entrer une commande
69 <example>kill -TERM `cat /usr/local/apache2/logs/httpd.pid`</example>
71 <p>La seconde méthode permettant d'envoyer des signaux aux processus
72 <program>httpd</program>
73 consiste à utiliser les options <code>stop</code>,
74 <code>restart</code>, <code>graceful</code> et
75 <code>graceful-stop</code> du commutateur <code>-k</code> de la ligne
76 de commande comme décrit ci-dessous. Ce sont des arguments du binaire
77 <program> httpd</program>, mais il est recommandé de les utiliser
78 avec le script de contrôle <program>apachectl</program>, qui se
79 chargera de les passer à <program>httpd</program>.</p>
81 <p>Après avoir envoyé un signal à <program>httpd</program>, vous pouvez
82 suivre le cours de son action en entrant :</p>
84 <example>tail -f /usr/local/apache2/logs/error_log</example>
86 <p>Adaptez ces exemples en fonction de la définition de vos directives
87 <directive module="core">ServerRoot</directive> et
88 <directive module="mpm_common">PidFile</directive>.</p>
91 <section id="term"><title>Arrêter immédiatement</title>
93 <dl><dt>Signal: TERM</dt>
94 <dd><code>apachectl -k stop</code></dd>
97 <p>A la réception du signal <code>TERM</code> ou <code>stop</code>,
98 le processus parent tente immédiatement
99 de tuer tous ses processus enfants. Cela peut durer plusieurs secondes.
100 Après cela, le processus parent lui-même se termine. Toutes les requêtes
101 en cours sont terminées, et plus aucune autre n'est traitée.</p>
104 <section id="graceful"><title>Redémarrage en douceur</title>
106 <dl><dt>Signal: USR1</dt>
107 <dd><code>apachectl -k graceful</code></dd>
110 <p>A la réception du signal <code>USR1</code> ou
111 <code>graceful</code>, le
112 processus parent envoie aux processus enfants
113 <em>l'ordre</em> de se terminer une fois leur requête courante
114 traitée (ou de se terminer immédiatement s'ils n'ont plus rien à traiter).
115 Le processus parent relit ses fichiers de configuration et
116 réouvre ses fichiers de log. Chaque fois qu'un enfant s'éteint, le
117 processus parent le remplace par un processus
118 enfant de la nouvelle <em>génération</em> de la
119 configuration, et celui-ci commence immédiatement à traiter les
120 nouvelles requêtes.</p>
122 <p>Ce code est conçu pour toujours respecter la directive de contrôle
123 de processus des modules MPMs, afin que les nombres de processus et de
125 disponibles pour traiter les demandes des clients soient maintenus à
126 des valeurs appropriées tout au long du processus de démarrage.
127 En outre, il respecte la directive
128 <directive module="mpm_common">StartServers</directive> de la manière
129 suivante : si après une seconde au moins <directive
130 module="mpm_common">StartServers</directive> nouveaux processus
131 enfants n'ont pas été créés, un nombre suffisant de processus
132 supplémentaires est créé pour combler le manque. Ainsi le code
133 tente de maintenir à la fois le nombre approprié de processus enfants
134 en fonction de la charge du serveur, et le nombre de processus défini par la
135 directive <directive module="mpm_common">StartServers</directive>.</p>
137 <p>Les utilisateurs du module <module>mod_status</module>
138 noteront que les statistiques du serveur ne sont <strong>pas</strong>
139 remises à zéro quand un signal <code>USR1</code> est envoyé. Le code
140 a été conçu à la fois pour minimiser la durée durant laquelle le
141 serveur ne peut pas traiter de nouvelles requêtes (elle sont mises en
142 file d'attente par le système d'exploitation, et ne sont ainsi jamais
143 perdues) et pour respecter vos paramètres de personnalisation.
144 Pour y parvenir, il doit conserver le
145 <em>tableau</em> utilisé pour garder la trace de tous les processus
146 enfants au cours des différentes générations.</p>
148 <p>Dans son état des processus,
149 le module status utilise aussi un caractère <code>G</code> afin d'indiquer
150 quels processus enfants ont encore des traitements de requêtes en cours
151 débutés avant que l'ordre graceful restart ne soit donné.</p>
153 <p>Pour l'instant, il est impossible pour un script de rotation
155 <code>USR1</code> de savoir de manière certaine si tous les processus
156 enfants inscrivant des traces de pré-redémarrage sont terminés.
157 Nous vous suggérons d'attendre un délai suffisant après l'envoi du
158 signal <code>USR1</code>
159 avant de faire quoi que ce soit avec les anciens logs. Par exemple,
160 si la plupart de vos traitements durent moins de 10 minutes pour des
161 utilisateurs empruntant des liaisons à faible bande passante, alors vous
162 devriez attendre 15 minutes avant de faire quoi que ce soit
163 avec les anciens logs.</p>
166 <p>Lorsque vous initiez un redémarrage, une vérification de
167 la syntaxe est tout d'abord effectuée, afin de s'assurer qu'il n'y a
168 pas d'erreurs dans les fichiers de configuration. Si votre fichier de
169 configuration comporte des erreurs de syntaxe, vous recevrez un message
170 d'erreur les concernant, et le serveur refusera de redémarrer. Ceci
171 permet d'éviter la situation où un serveur a
172 été arrêté et ne peut plus redémarrer,
173 et où vous vous retrouvez avec un serveur hors-service.</p>
175 <p>Ceci ne garantit pas encore que le serveur va redémarrer
176 correctement. Pour vérifier la sémantique des fichiers de configuration
177 en plus de leur syntaxe, vous pouvez essayer de démarrer
178 <program>httpd</program> sous un utilisateur non root.
179 S'il n'y a pas d'erreur, il tentera d'ouvrir ses sockets et ses fichiers
180 de log et échouera car il n'a pas les privilèges root (ou parce que
181 l'instance actuelle de
182 <program>httpd</program> est déjà associée à ces ports). S'il échoue
183 pour toute autre raison, il y a probablement une erreur dans le
184 fichier de configuration et celle-ci doit être corrigée avant de lancer
185 le redémarrage en douceur.</p></note>
188 <section id="hup"><title>Redémarrer immédiatement</title>
190 <dl><dt>Signal: HUP</dt>
191 <dd><code>apachectl -k restart</code></dd>
194 <p>A la réception du signal <code>HUP</code> ou
195 <code>restart</code>, le
196 processus parent tue ses processus enfants comme pour le signal
197 <code>TERM</code>, mais le processus parent ne se termine pas.
198 Il relit ses fichiers de configuration, et réouvre ses fichiers de log.
199 Puis il donne naissance à un nouveau jeu de processus enfants
200 et continue de traiter les requêtes.</p>
202 <p>Les utilisateurs du module <module>mod_status</module>
203 noteront que les statistiques du serveur sont remises à zéro quand un
204 signal <code>HUP</code> est envoyé.</p>
206 <note>Comme dans le cas d'un redémarrage "graceful", une
207 vérification de la syntaxe est effectuée avant que le
208 redémarrage ne soit tenté. Si votre fichier de configuration comporte
209 des erreurs de syntaxe, le redémarrage ne sera pas effectué, et
210 vous recevrez un message concernant ces erreurs.</note>
213 <section id="gracefulstop"><title>Arrêt en douceur</title>
215 <dl><dt>Signal : WINCH</dt>
216 <dd><code>apachectl -k graceful-stop</code></dd>
219 <p>A la réception du signal <code>WINCH</code> ou
220 <code>graceful-stop</code>, le
221 processus parent <em>ordonne</em> à ses processus enfants
222 de s'arrêter après le traitement de leur requête en cours
223 (ou de s'arrêter immédiatement s'ils n'ont plus de requête à traiter).
224 Le processus parent va alors supprimer son fichier
225 <directive module="mpm_common">PidFile</directive> et cesser l'écoute
226 de tous ses ports. Le processus parent va continuer à s'exécuter,
227 et va surveiller les processus enfants
228 qui ont encore des requêtes à traiter. Lorsque tous les processus enfants
229 ont terminé leurs traitements et se sont arrêtés ou lorsque le délai
230 spécifié par la directive <directive
231 module="mpm_common">GracefulShutdownTimeout</directive> a été atteint,
232 le processus parent s'arrêtera à son tour. Si ce délai est atteint,
233 tout processus enfant encore en cours d'exécution se verra envoyer
234 le signal <code>TERM</code>
235 afin de le forcer à s'arrêter.</p>
237 <p>L'envoi du signal <code>TERM</code> va arrêter immédiatement
238 les processus parent et enfants en état "graceful". Cependant,
239 comme le fichier <directive module="mpm_common">PidFile</directive>
240 aura été supprimé, vous ne pourrez pas utiliser
241 <code>apachectl</code> ou <code>httpd</code> pour envoyer ce signal.</p>
243 <note><p>Le signal <code>graceful-stop</code> vous permet d'exécuter
244 simultanément plusieurs instances de <program>httpd</program>
245 avec des configurations identiques. Ceci s'avère une fonctionnalité
246 puissante quand vous effectuez des mises à jour "en douceur"
247 de httpd ; cependant, cela peut aussi causer des blocages fatals et des
248 situations de compétition (race conditions)
249 avec certaines configurations.</p>
251 <p>On a pris soin de s'assurer que les fichiers sur disque
252 comme les fichiers verrou (<directive
253 module="core">Mutex</directive>) et les fichiers socket Unix
254 (<directive module="mod_cgid">ScriptSock</directive>) contiennent le PID
255 du serveur, et coexistent sans problème. Cependant, si une directive de
256 configuration, un module tiers ou une CGI résidente utilise un autre
257 verrou ou fichier d'état sur disque, il faut prendre soin de s'assurer
258 que chaque instance de <program>httpd</program> qui s'exécute
259 n'écrase pas les fichiers des autres instances.</p>
261 <p>Vous devez aussi prendre garde aux autres situations de compétition,
262 comme l'utilisation de l'enregistrement des logs avec un transfert de ceux-ci
263 dans le style <program>rotation des logs</program>. Plusieurs instances
264 du programme de <program>rotation des logs</program> qui tentent d'effectuer
265 une rotation des mêmes fichiers de log en même temps peuvent détruire
266 mutuellement leurs propres fichiers de log.</p></note>