Cron

管理維護腳本的守護程序

  • April 9, 2015

我有一堆“夜班腳本”來維護伺服器。問題是,這些腳本可能執行的“操作視窗”總是不同的。有時幾分鐘和幾小時都沒有發生任何事情,有時伺服器整晚都在處理一些數據。這些腳本不僅是(但主要是)數據庫腳本。

一位開發人員提出了實現守護程序的想法。這個守護程序應該檢查伺服器狀況,如果找到足夠的空閒資源,就會啟動一些腳本。

我覺得這個想法很有趣(不是說引誘 ;-)),但不會真正重新發明輪子。有沒有經過驗證的模式?也許是一些 Shinken 或 Nagios 外掛?

在 nagios 世界中,您可以通過在服務上使用事件處理程序來連結任務。

事件處理程序實際上是在第一個服務命令之後執行的第二個命令, always(如果在全域配置中為該服務啟動)。事件處理程序的基本用法包括使用服務狀態和命令結果啟動它。然後事件處理程序腳本分析服務狀態(我們是 OK/WARNING/CRITICAL 嗎?是檢查第一次向我們發送此狀態嗎?硬狀態還是軟狀態等)並決定最終啟動命令。文件上的上一個連結顯示了執行此操作的基本 bash 腳本(請注意事件處理程序始終執行,即使在成功結果之後也是如此)。

因此,您可以在平均負載服務上添加一個事件處理程序,並且該事件處理程序可以在服務狀態正常時啟動您的 CPU 消耗維護任務。或者它可以簡單地在你的文件系統的某個地方設置一個標誌,你的 cron 任務會在執行之前檢查那個標誌。

現在,您可能需要在確定係統是否真的準備好啟動任務之前合併多個服務結果,原因如下:

  • 檢查平均負載和記憶體狀態
  • 檢查數據庫是否準備就緒並處於良好狀態
  • 檢查其他兩個不正常,但時間到了,你真的需要執行任務,否則你會遲到

如果 5 上的 3 個服務處於 OK 狀態(例如),像check_cluster這樣的檢查可以幫助您合併多個服務結果並讓服務處於 OK 狀態。然後,您將使用 check_cluster 在服務上設置事件處理程序。

管理**“我遲到了”**狀態更難。最好的地方是事件處理程式碼(如果你遲到了,忽略關鍵或警告狀態)。

您還可以有時間段限制(例如:維護任務應該只在星期五晚上執行)。你有幾個食譜。恕我直言,最好的方法是僅使用事件處理程序設置一個標誌,並使用維護任務調度程序(crontab)設置時間段。Nagios 提供了可以附加到您的服務的時間段,但即使是最新版本的 Nagios 也有一些嚴重的錯誤,服務未安排在 7/7 24/24 執行,這些錯誤將下一個服務執行推到時間段之外,然後將其推送1 週後(為什麼是 1 週?),然後再也不會啟動該服務)。Cron 或任何外部調度器都會做出更好更健壯的維護調度器(我沒有測試過 Shinken 調度器,也許它真的支持官方高級時間段

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