以下代码基本上做的是:
检查以确保存在naemonstats-2-graphite.pl脚本 系统
检查以确保系统上已安装collectd软件包
如果1和2检出确定,请检查是否已收集了条目 存在于root的crontab中,如果存在,则检查它是否被注释 出
这做了一些事情:
我需要避免调用系统实用程序(如果可能)并基本上优化此代码。缩短。
我的Chef Client,版本= 12.19.36
CollectdCronCheck = system 'crontab -l | egrep "^#*/1.*naemonstats-2-graphite.pl.nc.-U./var/run/collectd-unixsock"'
if !CollectdCronCheck.nil?
Chef::Log.info("######## I see that the cron entry for naemonstats collectd is commented out in root crontab - im fixing it now... #########")
cron "naemonstats-2-graphite" do
minute '/1'
command "#{node['naemon']['plugin_dir']}/server/scripts/cron/naemonstats-2-graphite.pl | nc -U /var/run/collectd-unixsock >& /dev/null"
end
else
cron "naemonstats-2-graphite" do
minute '*/1'
command "#{node['naemon']['plugin_dir']}/server/scripts/cron/naemonstats-2-graphite.pl | nc -U /var/run/collectd-unixsock >& /dev/null"
only_if { File.exist?("#{node['naemon']['plugin_dir']}/server/scripts/cron/naemonstats-2-graphite.pl") && "rpm -qa | grep 'collectd'" }
not_if "crontab -l | egrep '^*/1.*naemonstats-2-graphite.pl.nc.-U.*/var/run/collectd-unixsock'"
end
end
答案 0 :(得分:0)
你为什么要自己做这么多检查? cron
资源本身已经是幂等的。我们通常建议使用cron_d
食谱中的cron
资源而不是核心资源,但除非他们另有说法,否则要么相信Chef资源是幂等的。