如何管理需要多個行程的systemd服務?

如何管理需要多個行程的systemd服務?

我有一個網站,需要運行多個進程(python、node 等)。我目前建立了一個 systemd 服務,因此我可以輕鬆啟動和停止這些進程。我創建了一個啟動腳本,它啟動我需要的所有進程作為後台進程(附加&到命令末尾)。

這使我無法在發生崩潰時使用 systemd 的自動重新啟動功能,因為所有進程都是在單一腳本下啟動的。

我能想到的一個潛在的解決方案是為每個流程創建一個服務,然後透過建立一個主服務將它們連結在一起Requires。我不喜歡這個,因為這意味著我需要為我想要運行的網站的每個環境創建 4-5 個服務。

有沒有一種方法可以輕鬆定義啟動多個進程並單獨監視每個進程的服務?

答案1

創建幾個範本服務,其名稱如下@

使用模板,您可以為每個網站啟動一個命名實例:

systemctl start [email protected] [email protected]
systemctl start [email protected] [email protected]

在此類模板單元中,您可以用來%i引用實例名稱(本範例中為「clientone」)。因此「主要」單元(服務或目標)可以具有:

[Unit]
Requires=pythonthingy@%i.service
...
[Service]
Environment="DOCROOT=/var/www/%i"

如果每個網站需要多個參數,您可以從檔案載入它們:

[Service]
EnvironmentFile=/etc/someconfigdir/%i.conf

如果某些網站與其他網站相比需要非標準單位設置,請使用直接插件:

模板、插入項和擴展(如 %i)在中進行了解釋系統單元(5)

相關內容