У меня есть Java-приложение с 4 запущенными процессами (в Ubuntu 20.04LTS), см. рисунок ниже. Служба 1 запускается раньше 2+, служба 2 также запускает службы 3 и 4.
Я настроил 1 и 2 как простые, и это работает.
сервисные зависимости, сервис 2 запускает сервис 3 и 4
Однако службы 3 и 4 можно остановить/перезапустить независимо от службы 2. Есть ли способ реализовать это в определении службы app-service4.service?
я посмотрел на запись в блоге с описанием похожего случая, поэтому, исходя из этого, я думаю, что определение службы 3 и 4 с помощью службы 2 «PartOf» может быть способом, но как заставить службы 3 и 4 понять, что они уже запущены службой 2?
Ниже сервис2.сервис
[Ед. изм]
Описание=Сервис 2
После=service1.service
[Оказание услуг]
ExecStart=/usr/local/bin/service2.sh запуск
ExecStop=/usr/local/bin/service2.sh остановить
[Установить]
WantedBy=default.target
После запуска статус службы показывает CGroup, как показано ниже (упрощенный pid, имена и т. д.)
/system.slice/service2.service
|- 123 /bin/sh /usr/local/bin/service2.sh запуск
|- 124 Java-сервис2
|- 125 Java-сервис3
|- 126 Java-сервис4
Итак, как мне добавить service3.service, который позволил бы мне отключить/перезапустить service3, не прерывая работу service2? Ниже моя попытка, которая не может понять, что service2 уже запущен.
[Ед. изм]
Описание=Сервис 3
PartOf=service2.service
[Оказание услуг]
ExecStart=/usr/local/bin/service3.sh запуск
ExecStop=/usr/local/bin/service3.sh остановить
[Установить]
WantedBy=default.target
С этой настройкой после запуска службы 2 «служба состояния systemctl2» показывает процессы service2-servic4, как указано выше, а «служба состояния systemctl 3» отображается как «неактивная (мертвая)». Попытка запустить службу 3 (systemctl start service3) заканчивается остановкой того же самого (поскольку она уже была запущена, команда запуска завершается, после чего выполняется команда остановки). Если я повторю попытку запуска, она запустится как отдельная служба .
Я хотел бы, чтобы демон понимал, что процесс службы-2 на самом деле является службой-3, поэтому служба-3 будет отображаться как работающая. Это возможно?
Если нет - есть ли обходной путь, позволяющий раздельно обрабатывать службы?