Systemd

如何在 systemd 中允許慢啟動依賴服務

  • April 5, 2018

有時服務會啟動並分叉——給 systemd 一種它已經準備好的錯覺——即使它還沒有完成“熱身”。在這個特定的實例中,我使用 ApacheDS 來提供 LDAP 服務。當這個單元啟動時,檢查“systemctl status apacheds”將顯示它正在執行,以及單個日誌行:

4 月 4 日 15:34:33 雛菊系統

$$ 1 $$: 啟動 Apache 目錄伺服器。 但是……它還沒有服務。直到埠測試(如“lsof -i :389”或“netstat -pan | grep :389 | grep LISTEN”)顯示有一個活動的偵聽器,才沒有可用的 LDAP。

無論是否應該這樣做 - 完全啟動大約需要 2 分鐘。我的問題不是 ApacheDS 是否損壞或應該被替換 - 它是如何處理 systemd 中緩慢的初始化服務。

有沒有辦法在 systemd 中進行這樣的測試,或者告訴它等到有效以顯示 apacheds 服務已啟動,或者將其作為依賴服務的先決條件,而不會讓它們簡單地失敗並仍然拒絕啟動?

這是一個有效的測試腳本:

#!/bin/bash
TRIES=30
WAIT=10

while /bin/netstat -an | /bin/grep \:10389 | /bin/grep LISTEN ; [ $? -ne 0 ]; do
   let TRIES-=1
   if [ $TRIES -gt 1 ]; then
           sleep $WAIT
   fi
done

您可以ExecStartPost=foo在單元文件中添加foo一個腳本,該腳本會檢查(和重新檢查)直到服務可用。

編輯:您可能還需要增加TimeoutStartSec。預設值為 90 秒。

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