systemd 有 generator, 可用來按需產生新的 unit 設定.
舉個例子, 最近在整合 Lava 進行測試自動化. 其中有個測試會需要用到 iperf3. 但, iperf3 的 server 一次只能服務一個 client, 所以會需要啟動合理個數的 instance.
所以, 設計 iperf3 的 service file 如下
iperf3.service
做為主要的 service file[email protected]
代表一個個實際執行的 iperf3 instance, listen 在不同的 port 上- 每個 instance 會對應到
/etc/iperf3.d/
下的一個檔案, 裡面設了PORT=
及EXTRA_OPTS=
兩個變量, 供修改 instance 的參數- 例如
/etc/iperf3.d/1234
對應到[email protected]
這個 instance
- 例如
/lib/systemd/generators/iperf3-generator
會在啟動系統時, 還有systemctl daemon-reload
時被執行. 這個 generator 會- Scan
/etc/iperf3.d
目錄 - 為
iperf3.service
產生對各[email protected]
的相依
- Scan
- 在
systemctl restart iperf3.service
時就可以相依產帶起所有的 instance 了