1 <?xml version='1.0' encoding='UTF-8' ?>
2 <!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
3 <?xml-stylesheet type="text/xsl" href="./style/manual.es.xsl"?>
4 <!-- English Revision: 105989:924467 (outdated) -->
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.
23 <manualpage metafile="stopping.xml.meta">
25 <title>Iniciar y Parar el servidor Apache</title>
28 <p>Este documento explica como iniciar y parar el servidor Apache
29 en sistemas tipo Unix. Los usuarios de Windows NT, 2000 y XP
30 deben consultar la sección <a
31 href="platform/windows.html#winsvc">Ejecutar Apache como un
32 servicio</a> y los usuario de Windows 9x y ME deben consultar <a
33 href="platform/windows.html#wincons">Ejecutar Apache como una
34 Aplicación de Consola</a> para obtener información
35 sobre como controlar Apache en esas plataformas.</p>
38 <seealso><a href="programs/httpd.html">httpd</a></seealso>
39 <seealso><a href="programs/apachectl.html">apachectl</a></seealso>
41 <section id="introduction"><title>Introducción</title>
43 <p>Para parar y reiniciar Apache, hay que enviar la señal
44 apropiada al proceso padre <code>httpd</code> que se esté
45 ejecutando. Hay dos maneras de enviar estas señales. En
46 primer lugar, puede usar el comando de Unix <code>kill</code> que
47 envía señales directamente a los procesos. Puede que
48 tenga varios procesos <code>httpd</code> ejecutandose en su
49 sistema, pero las señales deben enviarse solamente al proceso
50 padre, cuyo pid está especificado en la directiva <directive
51 module="mpm_common">PidFile</directive>. Esto quiere decir que no
52 debe necesitar enviar señales a ningún proceso excepto
53 al proceso padre. Hay tres señales que puede enviar al
54 proceso padre: <code><a href="#term">TERM</a></code>, <code><a
55 href="#hup">HUP</a></code>, y <code><a
56 href="#graceful">USR1</a></code>, que van a ser descritas a
57 continuación.</p>
59 <p>Para enviar una señal al proceso padre debe escribir un
60 comando como el que se muestra en el ejemplo:</p>
62 <example>kill -TERM `cat /usr/local/apache2/logs/httpd.pid`</example>
64 <p>La segunda manera de enviar señales a los procesos
65 <code>httpd</code> es usando las opciones de línea de
66 comandos <code>-k</code>: <code>stop</code>, <code>restart</code>,
67 y <code>graceful</code>, como se muestra más abajo. Estas
68 opciones se le pueden pasar al binario <a
69 href="programs/httpd.html">httpd</a>, pero se recomienda que se
70 pasen al script de control <a
71 href="programs/apachectl.html">apachectl</a>, que a su vez los
72 pasará a <code>httpd</code>.</p>
74 <p>Después de haber enviado las señales que desee a
75 <code>httpd</code>, puede ver como progresa el proceso
78 <example>tail -f /usr/local/apache2/logs/error_log</example>
80 <p>Modifique estos ejemplos para que coincidan con la
81 configuración que tenga especificada en las directivas
82 <directive module="core">ServerRoot</directive> y <directive
83 module="mpm_common">PidFile</directive> en su fichero principal de
84 configuración.</p>
87 <section id="term"><title>Parar Apache</title>
89 <dl><dt>Señal: TERM</dt>
90 <dd><code>apachectl -k stop</code></dd>
93 <p>Enviar las señales <code>TERM</code> o <code>stop</code>
94 al proceso padre hace que se intenten eliminar todos los procesos
95 hijo inmediatamente. Esto puede tardar algunos minutos. Una vez
96 que hayan terminado todos los procesos hijo, terminará el
97 proceso padre. Cualquier petición en proceso terminará
98 inmediatanmente, y ninguna petición posterior será
102 <section id="graceful"><title>Reinicio Graceful</title>
104 <dl><dt>Señal: USR1</dt>
105 <dd><code>apachectl -k graceful</code></dd>
108 <p>Las señales <code>USR1</code> o <code>graceful</code>
109 hacen que el proceso padre <em>indique</em> a sus hijos que
110 terminen después de servir la petición que estén
111 atendiendo en ese momento (o de inmediato si no están
112 sirviendo ninguna petición). El proceso padre lee de nuevo
113 sus ficheros de configuración y vuelve a abrir sus ficheros
114 log. Conforme cada hijo va terminando, el proceso padre lo va
115 sustituyendo con un hijo de una nueva <em>generación</em> con
116 la nueva configuración, que empeciezan a servir peticiones
119 <note>En algunas plataformas que no permiten usar
120 <code>USR1</code> para reinicios graceful, puede usarse una
121 señal alternativa (como <code>WINCH</code>). Tambien puede
122 usar <code>apachectl graceful</code> y el script de control
123 enviará la señal adecuada para su plataforma.</note>
125 <p>Apache está diseñado para respetar en todo momento la
126 directiva de control de procesos de los MPM, así como para
127 que el número de procesos y hebras disponibles para servir a
128 los clientes se mantenga en los valores adecuados durante el
129 proceso de reinicio. Aún más, está diseñado
130 para respetar la directiva <directive
131 module="mpm_common">StartServers</directive> de la siguiente
132 manera: si después de al menos un segundo el nuevo hijo de la
133 directiva <directive module="mpm_common">StartServers</directive>
134 no ha sido creado, entonces crea los suficientes para se atienda
135 el trabajo que queda por hacer. Así, se intenta mantener
136 tanto el número de hijos adecuado para el trabajo que el
137 servidor tenga en ese momento, como respetar la configuración
138 determinada por los parámetros de la directiva
139 <directive>StartServers</directive>.</p>
141 <p>Los usuarios del módulo <module>mod_status</module>
142 notarán que las estadísticas del servidor
143 <strong>no</strong> se ponen a cero cuando se usa la señal
144 <code>USR1</code>. Apache fue escrito tanto para minimizar el
145 tiempo en el que el servidor no puede servir nuevas peticiones
146 (que se pondrán en cola por el sistema operativo, de modo que
147 se no se pierda ningún evento), como para respetar sus
148 parámetros de ajuste. Para hacer esto, tiene que guardar el
149 <em>scoreboard</em> usado para llevar el registro de los procesos
150 hijo a través de las distintas generaciones.</p>
152 <p>El mod_status también usa una <code>G</code> para indicar
153 que esos hijos están todavía sirviendo peticiones
154 previas al reinicio graceful.</p>
156 <p>Actualmente no existe ninguna manera de que un script con un
157 log de rotación usando <code>USR1</code> sepa con seguridad
158 que todos los hijos que se registraron en el log con anterioridad
159 al reinicio han terminado. Se aconseja que se use un retardo
160 adecuado después de enviar la señal <code>USR1</code>
161 antes de hacer nada con el log antiguo. Por ejemplo, si la mayor
162 parte las visitas que recibe de usuarios que tienen conexiones de
163 baja velocidad tardan menos de 10 minutos en completarse, entoces
164 espere 15 minutos antes de hacer nada con el log antiguo.</p>
166 <note>Si su fichero de configuración tiene errores cuando
167 haga el reinicio, entonces el proceso padre no se reinciciará
168 y terminará con un error. En caso de un reinicio graceful,
169 también dejará a los procesos hijo ejecutandose mientras
170 existan. (Estos son los hijos de los que se está saliendo de
171 forma graceful y que están sirviendo sus últimas
172 peticiones.) Esto provocará problemas si intenta reiniciar el
173 servidor -- no será posible conectarse a la lista de puertos
174 de escucha. Antes de reiniciar, puede comprobar que la sintaxis de
175 sus ficheros de configuracion es correcta con la opción de
176 línea de comandos <code>-t</code> (consulte <a
177 href="programs/httpd.html">httpd</a>). No obstante, esto no
178 garantiza que el servidor se reinicie correctamente. Para
179 comprobar que no hay errores en los ficheros de
180 configuración, puede intentar iniciar <code>httpd</code> con
181 un usuario diferente a root. Si no hay errores, intentará
182 abrir sus sockets y logs y fallará porque el usuario no es
183 root (o porque el <code>httpd</code> que se está ejecutando
184 en ese momento ya está conectado a esos puertos). Si falla
185 por cualquier otra razón, entonces casi seguro que hay
186 algún error en alguno de los ficheros de configuración y
187 debe corregir ese o esos errores antes de hacer un reinicio
191 <section id="hup"><title>Reiniciar Apache</title>
193 <dl><dt>Señal: HUP</dt>
194 <dd><code>apachectl -k restart</code></dd>
197 <p>El envío de las señales <code>HUP</code> o
198 <code>restart</code> al proceso padre hace que los procesos hijo
199 terminen como si le enviá ramos la señal
200 <code>TERM</code>, para eliminar el proceso padre. La diferencia
201 está en que estas señales vuelven a leer los archivos de
202 configuración y vuelven a abrir los ficheros log. Se genera
203 un nuevo conjunto de hijos y se continúa sirviendo
206 <p>Los usuarios del módulo <module>mod_status</module>
207 notarán que las estadísticas del servidor se ponen a
208 cero cuando se envía la señal <code>HUP</code>.</p>
210 <note>Si su fichero de configuración contiene errores, cuando
211 intente reiniciar, el proceso padre del servidor no se
212 reiniciará, sino que terminará con un error. Consulte
213 más arriba cómo puede solucionar este problema.</note>
216 <section id="race"><title>Apéndice: señales y race conditions</title>
218 <p>Con anterioridad a la versión de Apache 1.2b9 había
219 varias <em>race conditions</em> implicadas en las señales
220 para parar y reiniciar procesos (una descripción sencilla de
221 una race condition es: un problema relacionado con el momento en
222 que suceden las cosas, como si algo sucediera en momento en que no
223 debe, y entonces el resultado esperado no se corresponde con el
224 obtenido). Para aquellas arquitecturas que tienen el conjunto de
225 características "adecuadas", se han eliminado tantas race
226 conditions como ha sido posible. Pero hay que tener en cuenta que
227 todavía existen race conditions en algunas arquitecturas.</p>
229 <p>En las arquitecturas que usan un <directive
230 module="mpm_common">ScoreBoardFile</directive> en disco, existe la
231 posibilidad de que se corrompan los scoreboards. Esto puede hacer
232 que se produzca el error "bind: Address already in use"
233 (después de usar<code>HUP</code>) o el error "long lost child
234 came home!" (después de usar <code>USR1</code>). En el
235 primer caso se trata de un error irrecuperable, mientras que en el
236 segundo, solo ocurre que el servidor pierde un slot del
237 scoreboard. Por lo tanto, sería aconsejable usar reinicios
238 graceful, y solo hacer reinicios normales de forma
239 ocasional. Estos problemas son bastante complicados de solucionar,
240 pero afortunadamente casi ninguna arquitectura necesita un fichero
241 scoreboard. Consulte la documentación de la directiva
242 <directive module="mpm_common">ScoreBoardFile</directive> para ver
243 las arquitecturas que la usan.</p>
245 <p>Todas las arquitecturas tienen una pequeña race condition
246 en cada proceso hijo implicada en la segunda y subsiguientes
247 peticiones en una conexión HTTP persistente
248 (KeepAlive). Puede ser que el servidor termine después de
249 leer la línea de petición pero antes de leer cualquiera
250 de las cebeceras de petición. Hay una solución que fue
251 descubierta demasiado tarde para la incluirla en versión
252 1.2. En teoria esto no debe suponer ningún problema porque el
253 cliente KeepAlive ha de esperar que estas cosas pasen debido a los
254 retardos de red y a los timeouts que a veces dan los
255 servidores. En la practica, parece que no afecta a nada más
256 -- en una sesión de pruebas, un servidor se reinició
257 veinte veces por segundo y los clientes pudieron navegar sin
258 problemas por el sitio web sin encontrar problemas ni para
259 descargar una sola imagen ni encontrar un solo enlace roto. </p>