У меня есть две службы времени выполнения, работающие на моей Linux-машине. Я настроил его так, что apt-get update и apt-get upgrade обновляют сервисы на случай, если я отправил обновление на любой из них.
Теперь моя проблема в том, что A.service делает вызов API B.service во время инициализации для получения системной информации. (A.service делает что-то, B.service извлекает информацию и предоставляет информацию в виде API для A.service).
После обновления мне нужно перезапустить обе службы, для этого я выполняю «sudo systemctl restart A.service B.service». Теперь A.service не может инициализироваться, потому что B.Service еще не запущен.
Файл конфигурации A.service:
[Ед. изм]
Описание=A.service
После=B.service
Требуется=B.service
[Оказание услуг]
Тип=уведомить
Уведомление о доступе = все
ExecStart=/usr/bin/a_service
Файл конфигурации B.service:
[Ед. изм]
Описание=B.service
До=A.service
[Оказание услуг]
Тип=уведомить
Уведомление о доступе = все
ExecStart=/usr/bin/b_service
Насколько я понимаю, «После» и «До» должны определять порядок запуска. Это отлично работает при перезагрузке машины, но я должен заставить это работать и с перезагрузкой, потому что перезагрузка после каждого обновления невозможна.
Желаемый результат:
$ sudo systemctl перезапустить A.service B.service
...
Запущен Б.сервис
Запущен А.сервис
...
Есть ли способ добиться этого? В настоящее время при выполнении 'systemctl restart A.service B.service A запустится раньше B и, следовательно, завершится с ошибкой.