多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
### 从 cron 运行 Puppet 你的 Puppet 工作在休眠状态吗? 默认情况下,当你在客户端上运行 Puppet agent 时, 它会以守护进程(后台进程)的方式执行,每隔30分钟唤醒一次并检查配置清单是否有更新并应用这些变更 (也可以在 puppet.conf 中将 splay 选项的值设为 true 来指定一个随机的时间间隔)。 如果想要更灵活的控制 Puppet 的运行,你可以安排 cron 任务来替代守护进程的触发执行方式。 例如,如果你有很多的 Puppet 客户端,可能需要刻意地错开 Puppet 的运行时间以减轻 Puppetmaster 的负载压力。一个简单的方法是:将客户端主机名的哈希(散列)值作为 cron 任务的分钟或小时的时间参数。 #### 操作步骤 使用 Puppet 的 inline_template 函数,它允许你执行 Ruby 代码: ``` cron { "run-puppet": command => "/usr/sbin/puppet agent --test", minute => inline_template("<%= hostname.hash.abs % 60 %>"), } service { "puppet": ensure => stopped, enable => false, } ``` #### 工作原理 因为每个主机名会生成一个唯一的哈希值,所以每个客户端将会在一小时的不同分钟数运行 Puppet。 这种散列技术对于使 cron 任务随机运行是相当有用的,因为分散了运行时间,改善了互相干扰, 从而减轻了 Puppetmaster 的负载压力。 #### 更多用法 你可能会发现,随着时间的推移以守护进程方式运行的 Puppet 会占用更多的内存, 或者偶尔 Puppet 与 Puppetmaster 的通信处于停滞状态(stuck state)。 以 cron 方式运行 Puppet 会解决这些问题。 参考 Puppet Labs 的 Wiki 页面 [http://projects.puppetlabs.com/projects/puppet/wiki/Cron_Patterns](http://projects.puppetlabs.com/projects/puppet/wiki/Cron_Patterns) 获得更多信息。 触发 Puppet 的运行还有其他方式,包括 **MCollective** 工具, 我们将在这本书的后续章节中做详细介绍。 #### 参见本书 * 第 6 章的 [有效地分发 cron 任务](#ch06sec05) 一节 * 第 3 章的 [使用嵌入式 Ruby 代码](#ch03sec04) 一节 * 第 9 章的 [使用 MCollective](#ch09sec07) 一节