限制systemd服務手動重啟率

限制systemd服務手動重啟率

我有一個系統,其中的服務(例如 nginx)有時會被“systemd restart nginx”過度重新啟動(由於其他腳本的結果,例如應用新配置或輪換日誌)。

即使以這種方式「手動」重新啟動服務,systemd 也會因重新啟動速率限製而失敗。當然,在某一秒內重新啟動 nginx 10 次也是沒有用的。

那麼如何限制服務手動重啟率呢?是否有類似重啟冷卻時間的東西也適用於手動重啟請求?通常的設定似乎都適用於 systemd 自動重新啟動。

答案1

您可以使用StartLimitIntervalSec和來實現這一點StartLimitBurst

來自 systemd 單元手冊頁

StartLimitIntervalSec=間隔,StartLimitBurst=突發

配置單元啟動速率限制。在間隔時間內啟動超過突發次數的單元將不允許再啟動。使用 StartLimitIntervalSec= 設定檢查間隔,使用 StartLimitBurst= 設定每個間隔允許的啟動次數。

Interval 是一個時間跨度,預設單位為秒,但也可以指定其他單位,請參閱 systemd.time(5)。預設為管理器設定檔中的 DefaultStartLimitIntervalSec=,並且可以設定為 0 以停用任何類型的速率限制。 burst 是一個數字,預設為管理器設定檔中的 DefaultStartLimitBurst= 。

這些配置選項與服務設定 Restart= 結合使用特別有用(請參閱 systemd.service(5));但是,它們適用於所有類型的啟動(包括手動),而不僅僅是由 Restart= 邏輯觸發的啟動。

請注意,配置為 Restart= 且達到啟動限制的單元將不再嘗試重新啟動;但是,在間隔過後,它們仍可以手動或從計時器或套接字重新啟動。從那時起,重啟邏輯再次被啟動。 systemctl Reset-failed 將導致服務的重新啟動率計數器被刷新,如果管理員想要手動啟動單元並且啟動限制會幹擾該操作,則這非常有用。執行任何單元條件檢查後都會強制執行速率限制,因此條件失敗的單元啟動不計入速率限制。

答案2

您使用什麼版本的作業系統? nginx 軟體套件是使用 Linux 發行版的儲存庫還是從原始碼安裝的?

也許這些問題的答案可以幫助確定解決問題所需的可能路徑。

相關內容