¿Cómo recargo un grupo de servicios systemd?

12

Quiero recargar (¡no reiniciar!) Un grupo de servicios en un evento.

Por ejemplo, si actualizo mis certificados SSL, quiero que se recarguen todos los servicios que los usan ( nginxy que se me postfixocurran). Tampoco quiero recordar qué servicios en un servidor determinado usan certificados SSL. Debería ser suficiente agruparlos cuando se configuraron.

Por otro lado, me gustaría evitar cambiar los .servicearchivos provistos con los paquetes, porque esto requerirá intervención manual durante las actualizaciones.

¿Cómo lo logro?

Hay una opción para detener un grupo de servicios a pedido , pero esto los haría inaccesibles por un segundo o dos, o peor, pueden permanecer inactivos hasta que se solucionen. No puedo permitirme eso.

sanmai
fuente
No estoy seguro de cómo implementar certs, pero aquí también hay un pre-hook y post-hook para la mayoría de las renovaciones /opt/letsencrypt/letsencrypt-auto renew --pre-hook "service nginx stop; service postfix stop; service squid stop" --post-hook "service nginx start; service postfix start; service squid start" automáticas: certmonger tiene comandos de post- guardado y pre-guardado
Jacob Evans
@JacobEvans ¡Eso es lo que uso! Anteriormente había un problema en un analizador de archivos de configuración para certbot: no permitía punto y coma. Por lo tanto, tenía que usar un argumento de línea de comando o hacerlo de una vez. En este momento todo esto es innecesariamente.
sanmai
Si realiza .servicemodificaciones en sus archivos como modificaciones , puede evitar el problema de actualización. sudo systemctl edit foo.servicealmacenará sus cambios en /etc/systemd/system/foo.service.d/override.conflugar de alterar el foo.servicearchivo instalado .
quijotesco

Respuestas:

21

Crea /etc/systemd/system/ssl-reload.targetcon los siguientes contenidos.

[Unit]
Description=Services which need reloaded with SSL certs are updated.
PropagatesReloadTo=nginx postfix

Luego crea otro archivo: /etc/systemd/system/ssl-reload.path

[Unit]
Description=Restart services which use SSL when the cert directory changes

[Path]
PathChanged=/path/to/your/ssl/certs/dir

[Install]
WantedBy=multi-user.target

Entonces:

systemctl enable ssl-reload.path
systemctl start ssl-reload.path

Dicho esto, después de cambiar algo en su directorio SSL, los servicios deseados deberían recargarse automáticamente.

si no desea el comportamiento automático, no use el .patharchivo y solo emita systemctl reload ssl-reload.targetmanualmente después de cambiar los archivos SSL.

Mark Stosberg
fuente