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

Random Puppet:在同一节点上随机化多个CronJob,random,cron,puppet,Random,Cron,Puppet,我在一个傀儡化的LAMP节点上有大量Drupal站点。每个都有一个cronjob,它需要每小时运行一次,并且当前是每小时运行一次。为了分散这导致的峰值负载,我尝试将cronjobs分散到随机分钟,最好不要手动配置分钟值。在两次Puppet运行之间,该值应保持不变。不需要考虑其他节点 下面是我的cronjob清单中的一个示例: # Drupal cronjobs cron { "www1.example.com": command => "nice -n 19 drush -

我在一个傀儡化的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),导致同一节点上的每个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。我该如何解决这个问题呢?

考虑得不错,但是您需要将
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',
}

尽管由于
mycron

中的默认设置,甚至可以跳过
sure
。我没有意识到这一点。我对定义的类型不太熟悉。你能提供一个例子,说明我将如何在上面展示的cronjobs中使用这种类型吗?@MartijnHeemels,应该被用作:
my_cron{“www1.example.com”:}
如果
hour
user
都是相同的并且定义好的。嗯,不:-)你只要用
my cron
替换vanilla
cron
资源即可。我将添加一个示例。