我使用puppet来管理linux服务器和各种服务。它运作良好,除了木偶服务本身。
我的木偶课是这样的:
class puppet {
file { "/etc/puppet/puppet.conf":
owner => 0, group => 0, mode => 0644,
content => template("${module_name}/puppet.conf.erb"),
}
service { "puppet":
name => "puppet",
ensure => running,
enable => true, hasstatus => true, hasrestart => true,
require => File["/etc/puppet/puppet/conf"]
subscribe => File["/etc/puppet/puppet/conf"]
}
}
}
当对 /etc/puppet/puppet.conf 进行更改时,puppet 会注意到它需要重新启动 puppet 服务,因此会自行崩溃:
Mar 30 17:08:23 XXXX puppet-agent[20172]: (/Stage[main]/Puppet/File[/etc/puppet/puppet.conf]/content) content changed '{md5}eeaf5dfc7d88c8d9c85e6a8cc714d702' to '{md5}ef6ff0e423f4125e24b689980df9f71d'
Mar 30 17:08:23 XXXX puppet-agent[20172]: Caught TERM; calling stop
你知道我如何使用 puppet 正确更新 puppet.conf 吗?
答案1
puppet 守护进程会自动注意到 puppet.conf 文件的更改,而无需重新启动。只需删除其中subscribe => File["/etc/puppet/puppet.conf"]
的内容service { "puppet" ... }
,一切仍然有效。
木偶也不能真正ensure => running
为自己服务。使用类似的东西相互重启然而,使用 puppet 确保 cron 正在运行,并且 cronjob 确保 puppet 正在运行将起作用。
答案2
一种解决方案是不将 puppet 作为守护进程运行,而是从 cron 调用它。这是许多人喜欢的东西,因为对他们来说,守护进程消耗大量内存。