Detención y reinicio del servidor HTTP Apache
Reinicio correcto
Señal: USR1 apachectl -k graceful
La señal USR1
o graceful
hace que el proceso padre avise a los hijos que salgan después de su solicitud actual (o que salgan inmediatamente si «no está sirviendo nada). El padre vuelve a leer sus archivos de configuración y vuelve a abrir sus archivos de registro. A medida que cada hijo muere, el padre lo reemplaza con un hijo de la nueva generación de la configuración, que comienza a atender nuevas solicitudes de inmediato.
Este código está diseñado para respetar siempre la directiva de control de procesos de los MPM, por lo que la cantidad de procesos y subprocesos disponibles para atender a los clientes se mantendrá en los valores adecuados durante todo el proceso de reinicio. div id = «729f2093ce»>
de la siguiente manera: si después de un segundo al menos StartServers
no se han creado nuevos hijos, luego cree lo suficiente para tomar el relevo. Por lo tanto, el código intenta mantener tanto el número de hijos apropiado para la carga actual en el servidor como respetar sus deseos con el parámetro StartServers
.
Usuarios de mod_status
notará que las estadísticas del servidor no se establecen en cero cuando se envía un USR1
. El código se escribió para minimizar el tiempo en el que el servidor no puede atender nuevas solicitudes (el sistema operativo las pondrá en cola para que no se pierdan en ningún caso) y para respetar sus parámetros de ajuste. Para ello, tiene que mantener el marcador utilizado para realizar un seguimiento de todos los niños a través de las generaciones.
El módulo de estado también utilizará un G
para indicar los niños que están todavía se están sirviendo solicitudes que comenzaron antes de que se diera el reinicio elegante.
En la actualidad, no hay forma de que un script de rotación de registros que use USR1
sepa con certeza que todos los niños que escriben el registro previo al reinicio ha finalizado. Le sugerimos que utilice un retraso adecuado después de enviar la señal USR1
antes de hacer algo con el registro anterior. Por ejemplo, si la mayoría de los accesos toman menos de 10 minutos para completar para los usuarios con enlaces de ancho de banda bajo, entonces puede esperar 15 minutos antes de hacer algo con el registro anterior.
Cuando emite un reinicio, primero se ejecuta una verificación de sintaxis para asegurarse de que no haya errores en los archivos de configuración. Si su archivo de configuración tiene errores, recibirá un mensaje de error sobre ese error de sintaxis y el servidor se negará a reiniciarse. Esto evita la situación en la que el servidor se detiene y luego no puede reiniciarse, dejándolo con un servidor que no funciona.
Esto aún no garantiza que el servidor se reiniciará correctamente. Para comprobar la semántica de los archivos de configuración y la sintaxis, puede intentar iniciar httpd
como un usuario no root. Si no hay errores, intentará abrir sus sockets y registros y fallará porque «no es root (o porque el httpd
actualmente en ejecución ya tiene esos puertos vinculados). Si falla por cualquier otro motivo, probablemente se trate de un error de archivo de configuración y el error debería solucionarse antes de ejecutar el reinicio ordenado.