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. Tout d'abord, vous pouvez
50 utiliser la commande unix <code>kill</code>
51 pour envoyer directement des signaux aux processus. Vous pouvez remarquer
52 que plusieurs processus <program>httpd</program> s'exécutent sur votre
53 système, mais il vous suffit d'envoyer les signaux au processus parent,
54 dont le PID est enregistré dans le fichier précisé par la directive
55 <directive module="mpm_common">PidFile</directive>. Autrement dit, vous
56 n'aurez jamais besoin d'envoyer des signaux à aucun des
57 processus enfants, mais seulement au processus parent. Trois types
58 de signaux peuvent être envoyés au processus parent :
59 <code><a href="#term">TERM</a></code>,
60 <code><a href="#graceful">USR1</a></code>,
61 <code><a href="#hup">HUP</a></code>, et
62 <code><a href="#gracefulstop">WINCH</a></code>, qui
63 sera décrit plus loin.</p>
65 <p>Pour envoyer un signal au processus parent, vous devez entrer une commande
68 <example>kill -TERM `cat /usr/local/apache2/logs/httpd.pid`</example>
70 <p>La seconde méthode permettant d'envoyer des signaux aux processus
71 <program>httpd</program>
72 consiste à utiliser les options de ligne de commande <code>-k</code> :
74 <code>restart</code>, <code>graceful</code> et <code>graceful-stop</code>,
75 comme décrit ci-dessous. Ce sont des arguments du binaire
76 <program> httpd</program>, mais il est recommandé de les utiliser
77 avec le script de contrôle <program>apachectl</program>, qui se
78 chargera de les passer à <program>httpd</program>.</p>
80 <p>Après avoir envoyé un signal à <program>httpd</program>, vous pouvez
81 suivre le cours de son action en entrant :</p>
83 <example>tail -f /usr/local/apache2/logs/error_log</example>
85 <p>Adaptez ces exemples en fonction de la définition de vos directives
86 <directive module="core">ServerRoot</directive> et
87 <directive module="mpm_common">PidFile</directive>.</p>
90 <section id="term"><title>Arrêter immédiatement</title>
92 <dl><dt>Signal: TERM</dt>
93 <dd><code>apachectl -k stop</code></dd>
96 <p>A la réception du signal <code>TERM</code> ou <code>stop</code>,
97 le processus parent tente immédiatement
98 de tuer tous ses processus enfants. Cela peut durer plusieurs secondes.
99 Après cela, le processus parent lui-même se termine. Toutes les requêtes
100 en cours sont terminées, et plus aucune autre n'est traitée.</p>
103 <section id="graceful"><title>Redémarrage en douceur</title>
105 <dl><dt>Signal: USR1</dt>
106 <dd><code>apachectl -k graceful</code></dd>
109 <p>A la réception du signal <code>USR1</code> ou
110 <code>graceful</code>, le
111 processus parent envoie aux processus enfants
112 <em>l'ordre</em> de se terminer une fois leur requête courante
113 traitée (ou de se terminer immédiatement s'ils n'ont plus rien à traiter).
114 Le processus parent relit ses fichiers de configuration et
115 réouvre ses fichiers de log. Chaque fois qu'un enfant s'éteint, le
116 processus parent le remplace par un processus
117 enfant de la nouvelle <em>génération</em> de la
118 configuration, et celui-ci commence immédiatement à traiter les
119 nouvelles requêtes.</p>
121 <p>Ce code est conçu pour toujours respecter la directive de contrôle
122 de processus des modules MPMs, afin que les nombres de processus et de
124 disponibles pour traiter les demandes des clients soient maintenus à
125 des valeurs appropriées tout au long du processus de démarrage.
126 En outre, il respecte la directive
127 <directive module="mpm_common">StartServers</directive> de la manière
128 suivante : si après une seconde au moins <directive
129 module="mpm_common">StartServers</directive> nouveaux processus
130 enfants n'ont pas été créés, un nombre suffisant de processus
131 supplémentaires est créé pour combler le manque. Ainsi le code
132 tente de maintenir à la fois le nombre approprié de processus enfants
133 en fonction de la charge du serveur, et vos souhaits définis par la
134 directive <directive module="mpm_common">StartServers</directive>.</p>
136 <p>Les utilisateurs du module <module>mod_status</module>
137 noteront que les statistiques du serveur ne sont <strong>pas</strong>
138 remises à zéro quand un signal <code>USR1</code> est envoyé. Le code
139 a été conçu à la fois pour minimiser la durée durant laquelle le
140 serveur ne peut pas traiter de nouvelles requêtes (elle sont mises en
141 file d'attente par le système d'exploitation, et ne sont ainsi jamais
142 perdues) et pour respecter vos paramètres de personnalisation.
143 Pour y parvenir, il doit conserver le
144 <em>tableau</em> utilisé pour garder la trace de tous les processus
145 enfants au cours des différentes générations.</p>
147 <p>Dans son état des processus,
148 le module status utilise aussi un <code>G</code> afin d'indiquer
149 quels processus enfants ont encore des traitements de requêtes en cours
150 débutés avant que l'ordre graceful restart ne soit donné.</p>
152 <p>Pour l'instant, il est impossible pour un script de rotation
154 <code>USR1</code> de savoir de manière certaine si tous les processus
155 enfants inscrivant des traces de pré-redémarrage sont terminés.
156 Nous vous suggérons d'attendre un délai suffisant après l'envoi du
157 signal <code>USR1</code>
158 avant de faire quoi que ce soit avec les anciens logs. Par exemple,
159 si la plupart de vos traitements durent moins de 10 minutes pour des
160 utilisateurs empruntant des liaisons à faible bande passante, alors vous
161 devriez attendre 15 minutes avant de faire quoi que ce soit
162 avec les anciens logs.</p>
165 <p>Lorsque vous initiez un redémarrage, une vérification de
166 la syntaxe est tout d'abord effectuée, afin de s'assurer qu'il n'y a
167 pas d'erreurs dans les fichiers de configuration. Si votre fichier de
168 configuration comporte des erreurs de syntaxe, vous recevrez un message
169 d'erreur les concernant, et le serveur refusera de redémarrer. Ceci
170 permet d'éviter la situation où un serveur a
171 été arrêté et ne peut plus redémarrer,
172 et où vous vous retrouvez avec un serveur hors-service.</p>
174 <p>Ceci ne garantit pas encore que le serveur va redémarrer
175 correctement. Pour vérifier la sémantique des fichiers de configuration
176 en plus de leur syntaxe, vous pouvez essayer de démarrer
177 <program>httpd</program> sous un utilisateur non root.
178 S'il n'y a pas d'erreurs, il tentera d'ouvrir ses sockets et ses fichiers
179 de log et échouera car il n'a pas les privilèges root (ou parce que
180 l'instance actuelle de
181 <program>httpd</program> est déjà associée à ces ports). S'il échoue
182 pour toute autre raison, il y a probablement une erreur dans le
183 fichier de configuration et celle-ci doit être corrigée avant de lancer
184 le redémarrage en douceur.</p></note>
187 <section id="hup"><title>Redémarrer immédiatement</title>
189 <dl><dt>Signal: HUP</dt>
190 <dd><code>apachectl -k restart</code></dd>
193 <p>A la réception du signal <code>HUP</code> ou
194 <code>restart</code>, le
195 processus parent tue ses processus enfants comme pour le signal
196 <code>TERM</code>, mais le processus parent ne se termine pas.
197 Il relit ses fichiers de configuration, et réouvre ses fichiers de log.
198 Puis il donne naissance à un nouveau jeu de processus enfants
199 et continue de traiter les requêtes.</p>
201 <p>Les utilisateurs du module <module>mod_status</module>
202 noteront que les statistiques du serveur sont remises à zéro quand un
203 signal <code>HUP</code> est envoyé.</p>
205 <note>Comme dans le cas d'un redémarrage "graceful", une
206 vérification de la syntaxe est effectuée avant que le
207 redémarrage ne soit tenté. Si votre fichier de configuration comporte
208 des erreurs de syntaxe, le redémarrage ne sera pas effectué, et
209 vous recevrez un message concernant ces erreurs.</note>
212 <section id="gracefulstop"><title>Arrêt en douceur</title>
214 <dl><dt>Signal : WINCH</dt>
215 <dd><code>apachectl -k graceful-stop</code></dd>
218 <p>A la réception du signal <code>WINCH</code> ou
219 <code>graceful-stop</code>, le
220 processus parent <em>avise</em> ses processus enfants
221 de s'arrêter après le traitement de leur requête en cours
222 (ou de s'arrêter immédiatement s'ils n'ont plus de requête à traiter).
223 Le processus parent va alors supprimer son fichier
224 <directive module="mpm_common">PidFile</directive> et cesser l'écoute
225 de tous ses ports. Le processus parent va continuer à s'exécuter,
226 et va surveiller les processus enfants
227 qui ont encore des requêtes à traiter. Lorsque tous les processus enfants
228 ont terminé leurs traitements et se sont arrêtés ou lorsque le délai
229 spécifié par la directive <directive
230 module="mpm_common">GracefulShutdownTimeout</directive> a été atteint,
231 le processus parent s'arrêtera à son tour. Si ce délai est atteint,
232 tout processus enfant encore en cours d'exécution se verra envoyer
233 le signal <code>TERM</code>
234 afin de le forcer à s'arrêter.</p>
236 <p>L'envoi du signal <code>TERM</code> va arrêter immédiatement
237 les processus parent et enfants en état "graceful". Cependant,
238 comme le fichier <directive module="mpm_common">PidFile</directive>
239 aura été supprimé, vous ne pourrez pas utiliser
240 <code>apachectl</code> ou <code>httpd</code> pour envoyer ce signal.</p>
242 <note><p>Le signal <code>graceful-stop</code> vous permet d'exécuter
243 simultanément plusieurs instances de <program>httpd</program>
244 avec des configurations identiques. Ceci s'avère une fonctionnalité
245 puissante quand vous effectuez des mises à jour "en douceur"
246 de httpd ; cependant, cela peut aussi causer des blocages fatals et des
247 situations de compétition (race conditions)
248 avec certaines configurations.</p>
250 <p>On a pris soin de s'assurer que les fichiers sur disque
251 comme les fichiers verrou (<directive
252 module="core">Mutex</directive>) et les fichiers socket Unix
253 (<directive module="mod_cgid">ScriptSock</directive>) contiennent le PID
254 du serveur, et coexistent sans problème. Cependant, si une directive de
255 configuration, un module tiers ou une CGI résidente utilise un autre
256 verrou ou fichier d'état sur disque, il faut prendre soin de s'assurer
257 que chaque instance de <program>httpd</program> qui s'exécute
258 n'écrase pas les fichiers des autres instances.</p>
260 <p>Vous devez aussi prendre garde aux autres situations de compétition,
261 comme l'utilisation de l'enregistrement des logs avec un transfert de ceux-ci
262 dans le style <program>rotation des logs</program>. Plusieurs instances
263 du programme de <program>rotation des logs</program> qui tentent d'effectuer
264 une rotation des mêmes fichiers de log en même temps peuvent détruire
265 mutuellement leurs propres fichiers de log.</p></note>