
我製作了一個 python 腳本來處理一些我想作為服務運行的資料。該腳本正在處理數據,然後休眠一段時間以處理傳入的新數據。
我的問題是,我想運行該服務的多個實例,因為我有幾個不同的資料來源需要處理,我的腳本當時是為了處理一個資料來源。
我看到了幾種不同的方法:
我可以重寫腳本來處理所有資料來源 - 這將使其無法用於臨時使用,並且還會使更新資料來源集變得更加困難,因為不可能自動發現已新增或刪除的來源,所以即使有可能,這是我最不喜歡的選擇。
我可以在 bash 或 python 中建立一個包裝器腳本,為我想要處理的資料來源啟動腳本。這也感覺有點笨拙。
我可以為每個資料來源建立一個單元文件,每個單元文件使用適當的參數呼叫處理腳本,這將為我提供許多系統文件,即processing_ds1.system、processing_ds2.system等。像是一種可能的方式,除非有充分的理由不這樣做。
我的首選方法是建立一個系統文件,可以使用每個資料來源的參數呼叫該文件,也可以啟動系統文件中的所有實例。
所以我有兩個選擇:
如何在單元文件中使用參數?我看過postgresql可以使用@啟動不同的版本,即
systemctl start postgres@12-main
啟動叢集 12-main。但這是如何做到的呢?我找不到 postgresql 的任何有用的單元檔案。
或者
是否可以並且建議從一個單元檔案啟動多個服務?
答案1
您可以使用範本單元文件:系統單元
以 OpenVPN 為例:您可以建立一個名為[email protected]
in 的單元文件/etc/systemd/system
,內容如下:
[Unit]
Description=OpenVPN connection to %i
After=network-online.target
Wants=network-online.target
[Service]
Type=forking
ExecStart=/usr/sbin/openvpn --config /etc/openvpn/%i.conf
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
每次執行
systemctl start openvpn@myconfig
systemd 都會將單元檔案中的 %i 替換為「myconfig」。所以你運行 /usr/sbin/openvpn --config /etc/openvpn/myconfig.conf