Come ricaricare un gruppo di servizi systemd?


12

Voglio ricaricare (non riavviare!) Un gruppo di servizi su un evento.

Ad esempio, se aggiorno i miei certificati SSL, voglio che tutti i servizi che li utilizzano vengano ricaricati ( nginxe mi postfixvengano in mente). Né voglio ricordare quali servizi su un determinato server utilizzano certificati SSL. Dovrebbe essere sufficiente raggrupparli quando sono stati configurati.

D'altra parte, vorrei evitare di modificare i .servicefile forniti con i pacchetti, poiché ciò richiederà un intervento manuale durante gli aggiornamenti.

Come lo realizzo?

C'è un'opzione per fermare un gruppo di servizi su richiesta , ma ciò li renderebbe inaccessibili per un secondo o due, o peggio ancora: potrebbero rimanere inattivi fino a quando non vengono risolti. Non posso permettermelo.


Non sono sicuro di come si distribuiscano i certificati, ma qui c'è anche un pre-hook e post-hook per la maggior parte dei rinnovi automagici /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" : certmonger ha i comandi postsave e presave
Jacob Evans,

@JacobEvans Questo è quello che uso! In precedenza si era verificato un problema in un parser di file di configurazione per certbot: non consentiva punti e virgola. Pertanto, è stato necessario utilizzare un argomento della riga di comando o farlo in una volta sola. In questo momento tutto ciò è inutilmente.
sanmai,

se si eseguono .servicemodifiche ai file come sostituzioni, è possibile evitare il problema di aggiornamento. sudo systemctl edit foo.servicememorizzerà le modifiche /etc/systemd/system/foo.service.d/override.confanziché alterare il foo.servicefile installato .
Quixotic

Risposte:


21

Crea /etc/systemd/system/ssl-reload.targetcon i seguenti contenuti.

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

Quindi crea un altro file: /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

Poi:

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

Detto questo, dopo aver modificato qualcosa nella directory SSL, i servizi desiderati dovrebbero essere ricaricati automaticamente.

se non si desidera il comportamento automatico, non utilizzare il .pathfile e rilasciare systemctl reload ssl-reload.targetmanualmente dopo aver modificato i file SSL.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.