Рейтинг:0

Как создать системный файл шаблона «запустить все» из сценария выскочки с несколькими службами?

флаг jp

Я нахожусь в процессе переноса всех пользовательских сценариев выскочки в systemd. Я наткнулся на сценарий, который использует несколько сервисов. Я не могу понять правильный синтаксис для обработки этого, или мне нужно просто создать отдельный .оказание услуг юнит-файлы для каждого. Возможно ли это для шаблонов? Документация по модулю SystemD не дает мне много информации, за исключением того, как создать файл шаблона (добавляя @ к названию) и как использовать для обозначения экземпляра.

Оригинальный выскочка дилер-start-all.conf

журнал консоли
старт у дилера
сценарий
    объявлять -aдилеры=("Часовой пояс" "Тайм-аут" "Запрос" "Отказ")

    для типа "${дилеры[@]}"
    делать
        если список initctl | grep "^дилер ($тип)"
        тогда
            стоп-дилер type=$type
        фи
        тип стартового дилера=$type
        echo "тип дилера $ запущен"
    сделано
конец скрипта

Другая его часть, дилер.conf, должно быть довольно резко и сухо, используя в ExecStart часть, например:

ExecStart=/usr/bin/php -f /path/to/dealer%i.php

журнал консоли

экземпляр $тип

остановка у дилера

сценарий
        sudo -u root php -f /path/to/dealer$type.php
конец скрипта

пост-стоп скрипт

если [ -z "$UPSTART_STOP_EVENTS" ]
    тогда
        echo "dealer$type остановлен в `дата +"%F %T.%N"` Запустите 'initctl Emit Dealer-Stop', а затем 'initctl Emit Dealer-Start' на `hostname`, чтобы снова запустить его." | mail -s "dealer$type Stopped" [email protected]
    еще
        echo "dealer$type был остановлен вручную в `дата +"%F %T"`."
фи
конец скрипта

Я просто не понимаю, как перевести массив в первом в системную версию? Должен ли я разбить их на отдельные файлы модулей? Если это так, то это не проблема и может быть легко сделано. Я просто не уверен в синтаксисе (если он существует), чтобы делать то, что делает первый.

Рейтинг:0
флаг cz

Шаблон модуля systemd это шаблон. Вы не собираетесь помещать в него массив.Скорее ты собираешься создавать экземпляр это для каждого экземпляра, который вы хотите, например:

systemctl включить дилера@TimeZone
systemctl включить дилера @Timeout
...

Где появляется в шаблоне, будет заменено тем, что вы указали.

Вы тоже не могу использовать в бинарном имени в ExecStart=. Это должен быть путь, который существует, и используется в его аргументах. Например:

ExecStart=/usr/bin/php -f /path/to/dealer%i.php
DevOpsSauce avatar
флаг jp
Спасибо. У меня была часть /usr/bin/php, но я забыл ввести ее в своем вопросе. Я попробую это и вернусь, чтобы принять.
DevOpsSauce avatar
флаг jp
Я попытался включить его с помощью `systemctl enable Dealer@TimeZone` и получил сообщение об ошибке: «Файлы юнитов не имеют конфигурации установки (WantedBy, RequredBy, также, настройки псевдонимов в разделе [Install] и DefaultInstance для юнитов-шаблонов).
Michael Hampton avatar
флаг cz
@IRGeekSauce Ну, это совершенно не связанная проблема.
DevOpsSauce avatar
флаг jp
Добавлен `[Install] WantedBy=multi-user.target`, и на этот раз ошибок не было. Теперь вернемся к исходной задаче.
DevOpsSauce avatar
флаг jp
Я заставил это работать. Я добавил файл `dealers.target` с `Requires=dealer-names-here`. Все еще не совсем уверен во всем этом, но, по крайней мере, ответил на первоначальный вопрос. Спасибо за помощь.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.