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

запускать службу systemd при запуске требования

У меня есть служба, которая зависит от mysql.service через Requires=. Это необходимо, поскольку служба аварийно завершает работу, если mysql недоступен.

Выполнение systemctl restart mysql работает отлично. Сначала он останавливает мою службу, перезапускает mysql и снова запускает мою службу.

Как я могу настроить свой блок, чтобы он снова запускался, если я запускаю systemctl stop mysql && systemctl start mysql?

Это особенно проблема при автоматическом обновлении mysql в Debian, поскольку процесс обновления использует stop/start и нет restart.


новый и лучший ответ

Ясно, что вчера я плохо читал. Кажется, вашу проблему легко решить, добавив mysql.service к вашим услугам WantedByпод [Install] раздел.

то после повторного включения службы ее следует запускать всякий раз, когда mysql.service запущен, пока ваш сервис включен

результат выглядит так:

[Unit]
Requires=mysql.service
After=mysql.service

[Install]
WantedBy=multi-user.target mysql.service

мой старый ответ для справки:

Я не знаю, можно ли настроить ваше устройство так, как вы хотите.

Однако я решил аналогичные проблемы, установив файлы systemd для изменения внешнего модуля, в вашем случае mysql.service.

предполагая, что ваше устройство foo.service вы могли бы создать .conf файл в
/etc/systemd/system/mysql.service.d/ со следующим содержанием:

[Unit]
Wants=foo.service
Before=foo.service

это заставит systemd попытаться запустить foo.service после каждого начала mysql.service

для полноты картины и процитируем systemd документация:

В дополнение к / etc / systemd / system добавляемые файлы «.conf» для системных служб могут быть размещены в каталогах / usr / lib / systemd / system или / run / systemd / system. Добавляемые файлы в / etc имеют приоритет над файлами в / run, которые, в свою очередь, имеют приоритет над файлами в / usr / lib. Добавляемые файлы в любом из этих каталогов имеют приоритет над файлами модулей, где бы они ни находились. (Конечно, поскольку / run является временным, а / usr / lib предназначен для поставщиков, маловероятно, что в любом из этих мест следует использовать drop-ins.)