我使用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 呼叫它。這是許多人喜歡的東西,因為對他們來說,守護程序消耗大量記憶體。