Scheduled-Task

如何根據主機名錯開計劃的 cfengine 任務

  • April 14, 2015

我正在嘗試在大型虛擬伺服器池上執行計劃任務,但我想盡量減少對管理程序的性能影響,理想情況下一次在一台伺服器上執行它。

想想這樣的事情:

   Hr07.Min01.host_1::
       "scheduled_service_restart"    usebundle   =>  service_restart;
   Hr07.Min02.host_2::
       "scheduled_service_restart"    usebundle   =>  service_restart;
   Hr07.Min03.host_3::
       "scheduled_service_restart"    usebundle   =>  service_restart;
   ...

現在,這行得通;但這個列表會顯著增加,而且看起來並不漂亮。

MinXY我可以以某種方式將主機名序列號(或任何通用類的序列號)與硬類中的整數匹配嗎?

我不建議使用像 Min01 這樣的 1 分鐘解析度類,除非您以 1 分鐘的間隔執行代理。該類只會在那一分鐘內定義。預設情況下,代理每 5 分鐘執行一次,即使使用大型策略集,完整的策略執行通常也會在一分鐘內完成。

您可能想看看splayclass函式。您可以在每小時或每天的時間段內確定地定義一個類。例如:

bundle agent example
{
 classes:
   Hr07::
     "service_restart"
       expression => splayclass("$(sys.fqhost)", "hourly"),
       comment => "So that we only perform restarts during the 7 oclock 
                   hour, and so that not all hosts restart at the same time 
                   we splay the restart class over an hour. Each host will 
                   define some 5 minute time slot during the hour.";

 methods:
   service_restart::
     "scheduled_service_restart" usebundle => service_restart;
}

irc.freenode.net 上的#cfengine 和help-cfengine也是詢問CFEngine 相關問題的好地方。

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