我正在尝试在 chef 中打印受 cron 作业配方影响的所有服务器的列表,我想在特定服务器的每个 cron 作业旁边打印 cron 时间值。
我已经使用了这样的脚本:
for i in $(ls cookbooks/cookbook_name/recipes);
do knife search node "recipes:*${i%.*}" -i;
done
我想从这样的表达式中提取crontab
时间:
% frequent zfs snapshot
cron_d 'zfs-auto-snapshot-frequently' do
minute '*/15'
path PATH
command '/opt/zfs-auto-snapshot.sh frequent 6'
end
% Hourly
cron_d 'zfs-auto-snapshot-hourly' do
minute '59'
path PATH
command '/opt/zfs-auto-snapshot.sh hourly 4'
end
% Daily
cron_d 'zfs-auto-snapshot-daily' do
minute '59'
hour '23'
path PATH
command '/opt/zfs-auto-snapshot.sh daily 3'
end
% Weekly
cron_d 'zfs-auto-snapshot-weekly' do
minute '0'
hour '0'
weekday '1'
path PATH
command '/opt/zfs-auto-snapshot.sh weekly 1'
end
% Monthly
cron_d 'zfs-auto-snapshot-monthly' do
minute '0'
hour '0'
day '1'
path PATH
command '/opt/zfs-auto-snapshot.sh monthly 1'
end
我需要这样的列表输出:
admindb.xyz.com ****3*
server.xyz.com ****3*
office.xyz.com *2***
collector01.xyz.com *3*4*
除非对代码做出大量假设并编写一些糟糕的正则表达式,否则这是不可能的。Chef 就是代码,任何代码的静态分析都很难,对于 Ruby 来说,它介于令人愤怒和"lolno"之间。最好的办法是甚至不看Chef,而是通过SSH直接查询每台机器。