Назад | Перейти на главную страницу

Используйте systemd для остановки одной службы во время работы другой

Я настраиваю службу systemd для обновления моих SSL-сертификатов от letsencrypt. Я бы хотел, чтобы таймер systemd остановил службу nginx, запустил мой скрипт обновления сертификата, а затем перезапустил nginx.

Есть ли у systemd какой-нибудь умный способ сделать это? Или мне просто нужно выполнить соответствующее действие остановки и запуска в самом скрипте?

Letsencrypt имеет хуки до и после обновления.

Добавление этого

[renewal-params]
# Other settings
pre-hook=systemctl stop <service name>
post-hook=systemctl start <service name>

к /etc/letsencrypt/renewal/<domain name>.conf будет останавливать и запускать службу каждый раз, когда вы запускаете certbot renew.

Есть ли у systemd какой-нибудь умный способ сделать это? Или мне просто нужно выполнить соответствующее действие остановки и запуска в самом скрипте?

Нет, "умного" пути нет. Проще говоря

systemctl stop <whatever>

и

systemctl start <whatever>

в вашем сценарии обновления по мере необходимости,

Если я правильно понял, вы хотите запланировать остановку nginx, чтобы сократить время простоя.

Я не знаю о системе D, но с любой командой unix вы можете использовать "at" для создания своей собственной команды.

Например


echo "systemctll stop nginx && mv /etc/my/cert/new.cert && systemctll start nginx" | at -m 5:00