Как перезагрузить группу сервисов systemd?


12

Я хочу перезагрузить (а не перезапустить!) Группу сервисов после события.

Например, если я обновлю свои SSL-сертификаты, я хочу, чтобы все службы, которые их используют, были перезагружены ( nginxи postfixприходят на ум). Также я не хочу помнить, какие службы на данном сервере используют SSL-сертификаты. Этого должно быть достаточно, чтобы они были сгруппированы, когда они были настроены.

С другой стороны, я бы хотел избежать изменения .serviceфайлов, поставляемых с пакетами, потому что это потребует ручного вмешательства во время обновлений.

Как мне это сделать?

Существует возможность остановить группу служб по запросу , но это сделает их недоступными на секунду или две, или еще хуже - они могут оставаться недоступными до тех пор, пока не будут исправлены. Я не могу себе этого позволить.


Я не уверен, как вы развертываете сертификаты, но для большинства автоматических обновлений /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 есть команды postave и presave
— Джейкоб Эванс

@JacobEvans Вот что я использую! Ранее была проблема в парсере файла конфигурации для certbot: он не разрешал точки с запятой. Поэтому вам пришлось использовать аргумент командной строки или сделать это за один раз. Прямо сейчас все это излишне.
— sanmai

если вы измените .serviceфайл как переопределение, вы можете избежать проблемы обновления. sudo systemctl edit foo.serviceбудет хранить ваши изменения, /etc/systemd/system/foo.service.d/override.confа не изменять установленный foo.serviceфайл.
— донкихотский

Ответы:


21

Создайте /etc/systemd/system/ssl-reload.targetсо следующим содержанием.

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

Затем создайте другой файл: /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

Затем:

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

С учетом вышесказанного, после изменения чего-либо в вашем каталоге SSL, нужные сервисы должны быть автоматически перезагружены.

если вам не нужно автоматическое поведение, то не используйте .pathфайл, а просто введите systemctl reload ssl-reload.targetвручную после изменения файлов SSL.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.