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

Запретить запуск службы systemd, если запущена другая служба systemd

В systemd (v237 на UbuntuLinux 18.04 bionic) я могу создать служебный файл (для A.service) и укажите другую услугу Requisite=B.service. Имея в виду, если я попытаюсь начать A.service и B.service еще не запущен, то A.service не запустится. Это слабая версия Requires, который начнется B.service когда я пытаюсь начать A.service.

Есть ли обратное? Могу я сказать: «Если B.service запущен, то не запустить эту службу »/« Если B.service запущен, то A.service не может запуститься »?

Документы говорят, если я Conflicts=B.service, затем начиная A остановит B, а затем запустит A. Но я не хочу, чтобы B останавливался, я просто хочу, чтобы A не запустился. Я хочу что-то Conflicts какие Requisite должен Requires.

Я, наверное, мог бы изменить ExecStart быть командой оболочки, которая потерпит неудачу, это systemctl is-active B.service или какой нибудь взлом. Есть подходящее решение?

Обычно это можно сделать с помощью ExecStartPre это проверяет, запущены ли другие службы. Если ExecStartPre команда возвращает код ошибки, после чего остальная часть процесса запуска прерывается.

ExecStartPre=!/usr/bin/systemctl is-active other-unit.service