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