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.
fuente
Respuestas:
Lo que dijo es correcto,
reload
le 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 segurorestart
. Yo personalmente no usopostgresql
, así que no lo sé.fuente
reload-or-restart
fuente
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 unaforce-reload
acción, lo que significareload
si el servicio lo admite yrestart
si el servicio no admite la recarga.No estoy seguro de cómo eso se traduce en el moderno mundo advenedizo de Ubuntu.
fuente
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.
fuente
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).
fuente
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. "
fuente