Systemd
如何在 systemd 中允許慢啟動依賴服務
有時服務會啟動並分叉——給 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 秒。