Существует ли способ иметь один app.service в systemd, запускают несколько независимых app.service единиц?

Например, если у меня было два сервисных файла, которые работали как type=forking тот запуск два различных JAVA-приложения и затем два сервисных файла, которые работают как type=simple запуск различных приложений, является там способом выполнить другой сервисный файл, который запустил бы/остановил бы другие четыре, но другие четыре могут все еще использоваться независимо?

например:

dataingest-type1.service
dataingest-type2.service
different-dataingest.type3.service
different-dataingest.type4.service

Все выполнение правильно как отдельные сервисы под systemd.

Мог сервис, как dataingest.service, запустить/остановить другие четыре?

Также, если один из других сервисов спустился и dataingest.service был выполнен снова, это должно запустить сервис снова. (в основном я пытался делать сценарий, который работает systemctl start <list of services> и настроенный это как услуга, однако если одна из сервисных остановок и сервисного запуска выполняется снова, он не запускает скрипт, поскольку это думает, что услуга работает.)

Так dataingest.service бывший похожий это:

[Unit]
Description=Stuff blah blah
Requires=network.target
After=network.target

[Service]
Type=oneshot  
ExecStart=/path/to/little/script.sh start
ExecStop=/path/to/little/script.sh stop
RemainAfterExit=true

[install]
WantedBy=multi-user.target

Сценарий удара просто делает одно задание!

#/bin/bash

/bin/systemctl $1 dataingest-type1.service dataingest-type2.service different-dataingest.type3.service different-dataingest.type4.service

Очевидно, если существует лучший метод.....

0
задан 31 July 2018 в 11:23

2 ответа

Добро пожаловать для выяснения у Ubuntu.

Это - одно использование systemd .targets.

Уже существует ответ на этот вопрос в сети StackExchange в том, Как создать виртуальный systemd сервис для останавливаний/начинания нескольких экземпляров вместе?

0
ответ дан 28 October 2019 в 06:05

Таким образом, используя ссылку, предоставленную @Mark, я мог потренироваться в том, что нужно сделать.

Основной сервис, dataingest.service, должен был быть целью, вместо этого переименовываться в dataingest.target. Блок dataingest.target имел следующее:

[Unit]
Description=Data Ingest Services
Requires=network.target
After=network.target
Wants=dataingest-type1.service dataingest-type2.service different-dataingest.type3.service different-dataingest.type4.service

[Install]
WantedBy=multi-user.target

Тогда отдельные сервисы имели что-то похожее следующее:

[Unit]
Description=type x data ingest service
PartOf=dataingest.target

[Service]
Type=......
etc
etc
etc

[Install]
WantedBy=dataingest.target

Затем systemctl включает dataingest ..... с последующей перезагрузкой.

Теперь сервисы могут запускаться индивидуально, а также только с помощью целевого файла. sudo systemctl start dataingest.target

Также, если один из сервисов не работает, целевой модуль запустит отдельный сервис.

Спасибо @mark

1
ответ дан 28 October 2019 в 06:05

Другие вопросы по тегам:

Похожие вопросы: