В 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