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

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

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

console log
start on dealer-start
script
    declare -a dealers=("TimeZone" "Timeout" "Inquiry" "Refuse")

    for type in "${dealers[@]}"
    do
        if initctl list | grep "^dealer ($type)"
        then
            stop dealer type=$type
        fi
        start dealer type=$type
        echo "dealer$type started"
    done
end script

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

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

console log

instance $type

stop on dealer-stop

script
        sudo -u root php -f /path/to/dealer$type.php
end script

post-stop script

if [ -z "$UPSTART_STOP_EVENTS" ]
    then
        echo "dealer$type stopped at `date +"%F %T.%N"` Run 'initctl emit dealer-stop' then 'initctl emit dealer-start' on `hostname` to get it running again." | mail -s "dealer$type Stopped" alerts@myemail.com
    else
        echo "dealer$type was manually stopped at `date +"%F %T"`."
fi
end script

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

0
задан 2 July 2021 в 19:01
1 ответ

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

systemctl enable dealer@TimeZone
systemctl enable dealer@Timeout
...

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

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

ExecStart=/usr/bin/php -f /path/to/dealer%i.php
0
ответ дан 28 July 2021 в 14:36

Теги

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