我在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。我该如何解决这个问题?
答案 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
。