2017-03-10 120 views
1

我有2個服務a.service和b.service。 a.service顯示Systemctl依賴性失敗,停止依賴服務

[Unit] 
Description=My service 

[Service] 
Type=forking 
ExecStart=/bin/sh /home/admin/run.sh 
Restart=on-failure 

[Install] 
WantedBy=multi-user.target, 

b.service

[Unit] 
Description=My service 

[Service] 
Type=forking 
ExecStart=/bin/sh $HOME/theFolder/run.sh 
Restart=on-failure 

[Install] 
WantedBy=multi-user.target 

現在,當我開始b.service,我敢肯定a.service將啓動。 在運行時期間,突然有人用/home/admin/run.sh混淆並且systemd無法啓動a.service(同時systemctl status a.service顯示爲失敗狀態)。現在有一個選項,以便b.service可以知道a.service失敗,它應該停止/退出?

+0

BindsTo = a.service –

回答

1

你想要麼BindsTo=Requires=添加到您的[Unit]部分,如man systemd.unit記載:

要求= 對其他單位提供配置需求的依賴。如果這個單位被激活,這裏列出的單位 也會被激活。如果其他單元之一被取消激活或其激活失敗,則該單元 將被停用。該選項可以多次指定,也可以在一個選項中指定多個由空格分隔的單位,在這種情況下,將爲所有列出的名稱創建要求依賴項。 請注意,需求依賴性不會影響服務啓動或停止的順序。 這必須使用After =或Before =選項獨立配置。如果一個單元foo.service 需要單元bar.service配置爲Requires =並且沒有配置使用After =或 Before =,那麼兩個單元將同時啓動並且在它們之間沒有任何延遲,如果 foo.service是活性。通常,爲了使 實現在處理失敗的服務時更健壯的系統,使用要求=而不是要求=是更好的選擇。

BindsTo = 提供配置需求的依賴,在風格上非常相似的要求=,但是除了這個 行爲,它也宣佈,任何時候突然所列單位的消失,本機停止。 如果某個服務自行選擇終止,則設備可能會突然意外消失,未插拔設備 或未經systemd參與卸載掛載點。