如何根据主机名错开计划的 cfengine 任务

如何根据主机名错开计划的 cfengine 任务

我正在尝试在大型虚拟服务器池上执行计划任务,但我想尽量减少对虚拟机管理程序的性能影响,理想情况下一次在一台服务器上执行它。

想想这样的事情:

    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吗?

答案1

我不建议使用 1 分钟分辨率类(如 Min01),除非您以 1 分钟的间隔运行代理。该类仅在那一分钟内定义。默认情况下,代理每 5 分钟运行一次,即使策略集很大,完整的策略运行通常也会在一分钟内完成。

你可能想看看展开类函数。您可以按小时或每日周期确定性地定义一个类。例如:

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帮助-cfengine也是询问 CFEngine 相关问题的好地方。

相关内容