以下为大概思路,可以用各种语言实现。
在 crontab 中每 4 小时检查一次 /var/lib/puppet/state/puppetdlock 这个文件是否存在 [1],如果存在,获得其 mtime,如果 mtime 和当前时间已经差了一个小时以上(没有理由单次运行会超过 1 个小时),那就:
service puppet stop
puppet agent --enable
puppet agent --test
当然,需要加入保证 Service['puppet'] 一直运行,这样当 --test 的时候,除了会完成同步之外,也就可以重新启动 puppet agent daemon。
[1]
http://projects.puppetlabs.com/issues/3757