Jak ponownie załadować grupę usług systemowych?

12

Chcę ponownie załadować (nie restartować!) Grupę usług po zdarzeniu.

Na przykład, jeśli zaktualizuję moje certyfikaty SSL, chcę, aby każda usługa, która ich używa, została ponownie załadowana ( nginxi postfixprzychodzi mi na myśl). Nie chcę też pamiętać, które usługi na danym serwerze używają certyfikatów SSL. Powinno wystarczyć zgrupowanie ich podczas konfiguracji.

Z drugiej strony chciałbym uniknąć zmiany .serviceplików dostarczanych z pakietami, ponieważ będzie to wymagało ręcznej interwencji podczas aktualizacji.

Jak to osiągnąć?

Istnieje możliwość zatrzymania grupy usług na żądanie , ale spowodowałoby to, że byłyby niedostępne przez sekundę lub dwie, lub gorzej - mogą pozostać bezczynne, dopóki nie zostaną naprawione. Nie stać mnie na to.

sanmai
źródło
Nie jestem pewien, w jaki sposób wdrażasz certyfikaty, ale tutaj jest również zaczepienie wstępne i późniejsze dla większości odnowień automagicznych /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 ma polecenia postave i preave
Jacob Evans
@JacobEvans Tego właśnie używam! Wcześniej wystąpił problem w parserze plików konfiguracyjnych dla certbota: nie pozwalał on na średniki. Dlatego musiałeś użyć argumentu wiersza poleceń lub zrobić to za jednym razem. W tej chwili wszystko to jest niepotrzebne.
sanmai
jeśli .serviceedytujesz pliki jako zastąpienia , możesz uniknąć problemu z aktualizacją. sudo systemctl edit foo.servicezapisze twoje zmiany /etc/systemd/system/foo.service.d/override.confzamiast zmieniać zainstalowany foo.serviceplik.
donkiszot

Odpowiedzi:

21

Utwórz /etc/systemd/system/ssl-reload.targetz następującą zawartością.

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

Następnie utwórz kolejny plik: /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

Następnie:

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

To powiedziawszy, po zmianie czegoś w katalogu SSL, pożądane usługi powinny zostać ponownie załadowane automatycznie.

jeśli nie chcesz automatycznego zachowania, nie używaj .pathpliku i po prostu wydaj systemctl reload ssl-reload.targetręcznie po zmianie plików SSL.

Mark Stosberg
źródło