Ubuntu
如何從具有多個服務的新貴腳本創建 systemd“全部啟動”模板單元文件?
我正在將所有自定義新貴腳本遷移到 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" alerts@myemail.com else echo "dealer$type was manually stopped at `date +"%F %T"`." fi end script
我只是不明白如何將第一個中的數組轉換為 systemd 版本?我應該把這些分解成單獨的單元文件嗎?如果是這樣,那麼這不是問題並且可以輕鬆完成。我只是不確定語法(如果存在)來做第一個正在做的事情。
systemd 單元模板是一個模板。您不會將數組放入其中。相反,您將為您想要的每個實例實例化它,例如:
systemctl enable dealer@TimeZone systemctl enable dealer@Timeout ...
模板中
%i
出現的位置將替換為您指定的位置。您也不能
%i
在.ExecStart=
它必須是存在的路徑,並%i
在其參數中使用。例如:ExecStart=/usr/bin/php -f /path/to/dealer%i.php