我正在将所有自定义新贵脚本迁移到 systemd。我遇到了一个使用多种服务的脚本。我无法弄清楚处理这个问题的正确语法,或者我是否需要.service
为每个文件创建单独的单元文件。这可以用于模板吗?SystemD单元文档没有给我太多信息,除了如何创建模板文件(附加@
到名称)以及如何使用%i
来表示实例。
最初的暴发户dealer-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" [email protected]
else
echo "dealer$type was manually stopped at `date +"%F %T"`."
fi
end script
我只是不明白如何将第一个中的数组转换为 systemd 版本?我应该把这些分解成单独的单元文件吗?如果是这样,那么这不是问题并且可以轻松完成。我只是不确定语法(如果存在)来做第一个正在做的事情。
systemd 单元模板是一个模板。您不会将数组放入其中。相反,您将为您想要的每个实例实例化它,例如:
模板中
%i
出现的位置将替换为您指定的位置。您也不能
%i
在.ExecStart=
它必须是存在的路径,并%i
在其参数中使用。例如: