Apache: diferencia entre reiniciar con ‘restart’ y ‘graceful’

ApacheVamos a ver las principales diferencias a la hora de reiniciar un servidor web Apache mediante /etc/init.d/httpd restart y /etc/init.d/httpd graceful.

Reinicio con restart

# apachectl -k restart
# /etc/init.d/httpd restart

Esta forma de reiniciar el servidor web es lo mismo que enviar una señal HUP a los procesos httpd (enviar señales a un proceso). Básicamente lo que hace es:

  1. Solicitar la finalización de los procesos con la señal TERM a los procesos child (hijos) y eliminar el proceso padre
  2. Se vuelven a leer los ficheros de configuración y se abren los ficheros de log. Las estadísticas de mod_status se reinician
  3. Se genera el proceso padre y a partir de él los nuevos procesos hijos

Como podéis ver, hay parada de servicio. Puede llegar a ser mínima pero hay un momento en el que no hay ningún proceso httpd para servir peticiones web.

Reinicio con graceful

# apachectl -k graceful
# /etc/init.d/httpd graceful

Esta forma de reiniciar Apache hace que se envíe una señal USR1, lo cual hace que en lugar de reiniciar todos los procesos hijos de vez, el proceso padre permite que cada uno de los child termine de servir la petición web antes de morir. El proceso sería el siguiente:

  1. Enviamos la señal USR1 o graceful
  2. El proceso padre indica a los hijos que mueran una vez finalizada la petición que estén sirviendo
  3. El proceso padre vuelve a leer los ficheros de configuración y abrir los logs
  4. Los procesos hijos van terminando de servir las peticiones y el padre los va sustituyendo por nuevos (que ya tienen cargada la nueva configuración)

Cara a mod_status, módulo que sirve para controlar el estado del servidor web, Apache no habrá sido reiniciado, mantendrá todas sus estadísticas y mostrará con una G los threads que están sirviendo previos al reinicio graceful.

 

Un comentario en “Apache: diferencia entre reiniciar con ‘restart’ y ‘graceful’

Comments are closed.