Я в процессе переноса всех пользовательских сценариев выскочки на 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? Следует ли мне разбить их на отдельные файлы модулей? Если да, то это не проблема, и это легко сделать. Я просто не уверен в синтаксисе (если он существует), чтобы делать то, что делает первый.
Шаблон 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