Например, если у меня было два сервисных файла, которые работали как 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
Очевидно, если существует лучший метод.....
Добро пожаловать для выяснения у Ubuntu.
Это - одно использование systemd .targets
.
Уже существует ответ на этот вопрос в сети StackExchange в том, Как создать виртуальный systemd сервис для останавливаний/начинания нескольких экземпляров вместе?
Таким образом, используя ссылку, предоставленную @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