systemd, generators

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 的參數
  • /lib/systemd/generators/iperf3-generator 會在啟動系統時, 還有 systemctl daemon-reload 時被執行. 這個 generator 會
  • systemctl restart iperf3.service 時就可以相依產帶起所有的 instance 了