Random Puppet:在同一节点上随机化多个CronJob
我在一个傀儡化的LAMP节点上有大量Drupal站点。每个都有一个cronjob,它需要每小时运行一次,并且当前是每小时运行一次。为了分散这导致的峰值负载,我尝试将cronjobs分散到随机分钟,最好不要手动配置分钟值。在两次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 -
# 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
替换vanillacron
资源即可。我将添加一个示例。