¿Cuál es la diferencia entre "reinicio del servicio" y "recarga del servicio"

74

Estoy tratando de entender la diferencia entre service restart [someservice]y service reload [someservice]. Entiendo que "reiniciar" reinicia el servicio, mientras que "recargar" vuelve a cargar la configuración, pero no entiendo las implicaciones prácticas de esto lo suficientemente bien como para determinar qué debo usar en un contexto dado.

Un ejemplo: la mayoría de las guías que he leído para configurar PostgreSQL dicen que, una vez que haya editado postgresql.conf y pg_hba.conf para permitir conexiones remotas, debería emitir sudo service postgresql restart. Sin embargo, si estuviera adivinando cuál usar según la descripción anterior, elegiría "recargar".

En caso de que sea importante, estoy en Ubuntu 11.10, aunque espero una explicación lo más aplicable posible.

nxzr
fuente
2
Hace un par de años, estaba ejecutando un servidor con varios miles de usuarios. reiniciar Apache no fue rápido por cualquier razón, tomaría aproximadamente 3 minutos reiniciar apache (razones). De todos modos, si el servidor estuvo inactivo durante 3 minutos, mi jefe recibiría unas 800 llamadas telefónicas. Con servicio de recarga, 0 llamadas telefónicas. Esa es la diferencia.
j0h

Respuestas:

41

Lo que dijo es correcto, reloadle dice al servicio que vuelva a cargar sus archivos de configuración. Eso significa que debería ser suficiente para volver a cargar la configuración; sin embargo, puede haber ciertos servicios que "no siguen la regla" o que no recargan los archivos de configuración. Debido a esto, probablemente estés más seguro restart. Yo personalmente no uso postgresql, así que no lo sé.

jman6495
fuente
1
Mientras tanto, hayreload-or-restart
Suuuehgi
Para PostgreSQL, puede aplicar cambios a /etc/postgresql/version/main/postgresql.conf con una recarga. La aplicación de cambios a pg_hba.conf requiere un reinicio.
Aidan Melen
63
  • reiniciar = detener + iniciar
  • reload = permanecer en ejecución + volver a leer los archivos de configuración.
Abdennour TOUMI
fuente
8

No todos los servicios son compatibles reload. Para aquellos que lo hacen, generalmente es preferible reiniciar (es decir, la recarga causa menos o ningún tiempo de inactividad).

El Manual de políticas de Debian especifica que cada /etc/init.d/script debe soportar una force-reloadacción, lo que significa reloadsi el servicio lo admite y restartsi el servicio no admite la recarga.

No estoy seguro de cómo eso se traduce en el moderno mundo advenedizo de Ubuntu.

Marius Gedminas
fuente
1
El Manual de políticas de Debian fue un enlace realmente útil, gracias.
No es un parche
1
la mayoría de la recarga de soporte, si no es a través del servicio del sistema, pensó /etc/init.d/SomeProgram reload
j0h
4

Para ampliar عبد النور التومي responda con mi experiencia con systemd.

En systemd cada vez que se inicia un proceso, se ejecuta dentro del contexto de systemd, el ejemplo más claro de esto es con las variables de entorno definidas en su archivo unitario.

Entonces, cuando envía una systemctl reload [someservice]señal, envía una señal al servicio para que se recargue con gracia si es compatible. Si no, el proceso simplemente ignorará la señal. Sin embargo, esto es configurable.

¿Qué quiero decir con gracia? para iniciar nuevos trabajadores con la nueva configuración o código y detener a los viejos trabajadores cuando terminen de atender las solicitudes actuales, si las hay.

Y si lo hace systemctl restart [someservice], le indicará a systemctl que le diga al servicio que se detenga, destruya el contexto actual del sistema, cree uno nuevo y vuelva a ejecutar el servicio. Esto tiene sentido, por ejemplo, para recargar las variables de entorno en un contexto systemd o si no se admite una recarga.

Espero que esto se aclare un poco y si me equivoco en algo, hágamelo saber.

Gaston Sanchez
fuente
0

actualmente, si un servicio necesita una patada (por ejemplo, un archivo de configuración cambiado) puede notificar al servicio, pero esto lleva a un reinicio. Sería bueno si se realizara una recarga si el servicio ya se estaba ejecutando (aunque supongo que seguramente habrá algunos servicios que requieren reinicios para algunos archivos, recargas para otros).

El ejemplo más complejo que se me ocurre es algo parecido a Apache. Normalmente, puede pedirle que se vuelva a cargar, sin embargo, a veces debe solicitar un reinicio (si agrega / elimina módulos, por ejemplo).

Un cero
fuente
0

postgres es un buen ejemplo de las grandes diferencias entre recargar y reiniciar, porque el último tiene que desconectar todos los clientes de la base de datos.

cuando las conexiones no deberían revertirse, puede detener el servicio sin un "--force" al principio usando pg_ctlcluster .

en /etc/postgres/{version}/{dbname}/postgresql.conf y en http://www.postgresql.org/docs/manuals/ cada parámetro tiene un comentario como "Este parámetro solo se puede configurar al inicio del servidor. "

maletin
fuente