systemd type=разветвление службы с несколькими вызовами

Мы сделаем это, заставив sedработать с файлом sub.txt, чтобы сгенерировать sedкод, который будет работать с входными данными для получения различных выходных файлов, как показано здесь:

$ sed -ne '
   1i\
h
   s|\(.\)[[:blank:]*->[[:blank:]]*\(.\)|g;s/\1/\2/gw./converted.\1_\2.txt|p
'./sub.txt | sed -nf -./input.file

Получаем выходные файлы с именами converted.A_Y.txt, converted.B_V.txtи т. д. Первый вызов sedгенерирует код sedна лету на основе преобразований, упомянутых во входных данных sub.txt, и использует его для запуска второго вызова sedна входных данных.

Предположим, что в файле sub.txt используется односимвольная транслитерация и символы не являются регулярными выражениями для sed ни в правой, ни в левой части команды s///команды sed.

0
14.10.2020, 01:55
1 ответ

После того, как вы создадите forksomething@.serviceи запустите systemctl daemon-reloadодин раз, systemdбудет готов к запуску любого количества forksomething@anything.serviceслужб без дальнейшей перезагрузки демона -.

На самом деле ваш forksomething@.serviceна самом деле является шаблоном службы . Вы можете использовать часть после @в имени экземпляра в качестве параметра в своем шаблоне. Например, если вы определяете свой сервис следующим образом:

[Service]
Type=forking
ExecStart=/usr/local/bin/forksomething "%i"

, а затем запустите:

systemctl daemon-reload
systemctl start forksomething@1.service
systemctl start forksomething@2.service
systemctl start forksomething@3.service

, тогда systemd выполнит для вас команды /usr/local/sbin/forksomething 1, /usr/local/sbin/forksomething 2и /usr/local/sbin/forksomething 3.

Если вы хотите, чтобы первые два экземпляра постоянно запускались при каждой загрузке с этого момента, вам нужно будет только произнести systemctl enable forksomething@1.serviceи systemctl enable forksomething@2.service. Эти команды автоматически создадут соответствующие символические ссылки на соответствующий каталог /etc/systemd/system/<whatever>.target.wants/.

Экземпляр шаблона службы можно вызвать, просто попытавшись запустить его; символические ссылки нужны только в том случае, если вы хотите, чтобы он был постоянно связан с каким-либо целевым устройством (, обычно default.targetили multi-user.target, если вы хотите, чтобы что-то запускалось при загрузке,хотя вы можете указать Before=some.targetв своем шаблоне службы, если хотите, чтобы экземпляры были связаны с какой-либо другой целью ).

1
18.03.2021, 22:57

Теги

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