Puppet:在同一个节点上随机化多个cronjobs

时间:2015-06-02 09:51:50

标签: random cron puppet

我在Puppetized LAMP节点上有大量的Drupal站点。每个都有一个cronjob需要每小时运行,目前运行在一小时。想要分散这导致的峰值负载,我试图将cronjobs分散到一个随机的分钟,最好不要手动配置分钟值。 Puppet运行之间的值应该保持不变。没有必要考虑其他节点。

这是我的cronjob清单中的一个例子:

# Drupal cronjobs
cron { "www1.example.com":
    command     => "nice -n 19 drush -y -r /var/www/sites/example.com/www1/current/public -l www1.example.com elysia-cron",
    user        => 'www-data',
    hour        => '*',
    minute      => '0',
}
cron { "www2.example.com":
    command     => "nice -n 19 drush -y -r /var/www/sites/example.com/www2/current/public -l www2.example.com elysia-cron",
    user        => 'www-data',
    hour        => '*',
    minute      => '0',
}
cron { "www3.example.com":
    command     => "nice -n 19 drush -y -r /var/www/sites/example.com/www3/current/public -l www3.example.com elysia-cron",
    user        => 'www-data',
    hour        => '*',
    minute      => '0',
}

我尝试了Puppet的fqdn_rand()函数,但这只是在不同的节点上随机化(由于使用了fqdn),导致同一节点上每个cronjob的值相同。

    minute      => fqdn_rand(60),   # Same value for each cronjob :(

以为我可以使用cronjob的名称来播种fqdn_rand()函数我尝试使用资源的名称来播种它,这不起作用:

    minute      => fqdn_rand(60, $title),     # Same value for each cronjob :(
    minute      => fqdn_rand(60, "${title}"), # Same value for each cronjob :(

我猜测$ title实际上并没有解决,而是作为字符串' $ title'到功能。无论如何,不​​是我需要的。

我没有找到另一个可以帮助我的功能,运行Puppet 3.7.5。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

良好的思考,但您需要将cron资源包装在已定义的类型中。

define my_cron($ensure = 'present', $hour,$user) {
  $minute = fqdn_rand(60, $title)
  cron {
    $title:
      ensure => $ensure,
      user   => $user,
      hour   => $hour,
      minute => $minute,
}

现在$title获取my_cron(以及cron}资源的实际值。

示例调用:

my_cron {
  '/usr/share/bin/cleanup-job':
    ensure => 'present',
    hour => '2',
}

虽然ensure中的默认设置甚至可以省略my_cron