Comment recharger un groupe de services systemd?

12

Je veux recharger (pas redémarrer!) Un groupe de services lors d'un événement.

Par exemple, si je mets à jour mes certificats SSL, je veux que tous les services qui les utilisent soient rechargés ( nginxet postfixme viennent à l'esprit). Je ne veux pas non plus me rappeler quels services sur un serveur donné utilisent des certificats SSL. Il devrait suffire de les regrouper lors de leur configuration.

D'un autre côté, j'aimerais éviter de modifier les .servicefichiers fournis avec les packages, car cela nécessitera une intervention manuelle lors des mises à jour.

Comment puis-je y parvenir?

Il existe une option pour arrêter un groupe de services sur demande , mais cela les rendrait inaccessibles pendant une seconde ou deux, ou pire - ils peuvent rester en panne jusqu'à ce qu'ils soient résolus. Je ne peux pas me le permettre.

sanmai
la source
Je ne sais pas comment vous déployez les certificats, mais voici également un pré-crochet et un post-crochet pour la plupart des renouvellements /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" automagiques: certmonger a des commandes postsave et presave
Jacob Evans
@JacobEvans C'est ce que j'utilise! Auparavant, il y avait un problème dans un analyseur de fichier de configuration pour certbot: il ne permettait pas les points-virgules. Par conséquent, vous deviez utiliser un argument de ligne de commande ou le faire en une seule fois. Pour le moment, tout cela est inutilement.
sanmai
si vous effectuez vos .servicemodifications de fichier en tant que remplacements, vous pouvez éviter le problème de mise à jour. sudo systemctl edit foo.servicestockera vos modifications au /etc/systemd/system/foo.service.d/override.conflieu de modifier le foo.servicefichier installé .
Don Quichotte

Réponses:

21

Créez /etc/systemd/system/ssl-reload.targetavec le contenu suivant.

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

Créez ensuite un autre fichier: /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

Alors:

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

Cela dit, après avoir modifié quelque chose dans votre répertoire SSL, les services souhaités doivent être rechargés automatiquement.

si vous ne souhaitez pas le comportement automatique, n'utilisez pas le .pathfichier et systemctl reload ssl-reload.targetlancez- le manuellement après avoir modifié les fichiers SSL.

Mark Stosberg
la source