Linux

有沒有辦法將兩個實例化的 systemd 服務作為一個單元來控制?

  • January 29, 2017

我有幾個我試圖在 Fedora 15 機器上執行的 python web 服務。它們由 paste 執行,啟動它們的唯一區別是它們讀取的配置文件。

這似乎很適合 systemd 的實例化服務,但我希望能夠將它們作為一個單元進行控制。需要兩種服務的 systemd 目標似乎是解決此問題的方法。啟動目標確實會啟動這兩個服務,但停止目標會使它們繼續執行。

這是服務文件:

[Unit]
Description=AUI Instance on Port %i
After=syslog.target

[Service]
WorkingDirectory=/usr/local/share/aui
ExecStart=/opt/cogo/bin/paster serve --log-file=/var/log/aui/%i deploy-%i.ini        
Restart=always
RestartSec=2
User=aui
Group=aui

[Install]
WantedBy=multi-user.target

這是目標文件:

[Unit]                    
Description=AUI           
Requires=aui@5001.service
Requires=aui@5002.service
After=syslog.target   

[Install]                 
WantedBy=multi-user.target

systemd 甚至可以進行這種分組嗎?

看看使用BindsTo選項將單元綁定在一起。systemd.unit(5)手冊頁是這樣描述的:

綁定到 =

配置需求依賴,在風格上與 Requires= 非常相似,但是除了這種行為之外,它還聲明當列出的任何單元突然消失時,該單元將停止。如果服務自行終止、設備被拔出或掛載點在沒有 systemd 參與的情況下被解除安裝,則單元可能會突然、意外地消失。

聽起來它應該做你想做的事情並將一個單元連接到另一個單元,以便每當主站停止時,從站也會停止,反之亦然以啟動。

不要忘記,如果需要,您還可以使用Before/After來指定它們應該開始的順序。

引用自:https://serverfault.com/questions/332399