2015-06-30 28 views
0

我正嘗試在廚師中使用cron資源配置cron作業。廚師在cron資源上添加變量

cron "execute_mytask" do 
    action :create 
    hour "0" 
    minute "0" 
    command '/bin/date >> /var/log/mytask.log; 
    /usr/bin/php /var/www/mysite/index.php cli/cron mytask "192.168.XXX.YYY" 
    >> /var/log/mytask.log 2>&1' 
end 

其中192.168.XXX.YYY是開發和生產環境 之間的不同它可以是一個域名或IP地址。

當我試圖通過添加變量/屬性來改變命令行時,問題出現了。例如,當我修改我的cron進入

command '/bin/date >> /var/log/mytask.log; 
    /usr/bin/php /var/www/mysite/index.php cli/cron 
    mytask "#{node["MyApp"]["IPAddress"]}" >> /var/log/mytask.log 2>&1' 
end 

然後我在我的cron作業得到的是

0 0 * * * /bin/date >> /var/log/mytask.log; 
/usr/bin/php /var/www/mysite/index.php cli/cron 
mytask "#{node["MyApp"]["IPAddress"]}" >> /var/log/mytask.log 2>&1 

,所以我能找到的最好的是用下面的

cron "execute_mytask" do 
    action :create 
    minute "*/5" 
    case node.chef_environment 
    when 'develop' 
     command '/bin/date >> /var/log/mytask.log; 
     /usr/bin/php /var/www/mysite/index.php cli/cron 
     mytask "192.168.XXX.1" >> /var/log/mytask.log 2>&1' 
end 
    when 'production' 
     command '/bin/date >> /var/log/mytask.log; 
     /usr/bin/php /var/www/mysite/index.php cli/cron 
     mytask "192.168.XXX.2" >> /var/log/mytask.log 2>&1' 
    end 
end 
來硬編碼

有沒有辦法在cron資源的命令部分添加變量/屬性?

回答

1

您需要用雙引號使Ruby的變量代換原理:

cron "execute_mytask" do 
    action :create 
    hour "0" 
    minute "0" 
    command "mytask \"#{node['MyApp']['IPAddress']}\" >> /var/log/mytask.log 2>&1" 
end 

(FYI:我個人更喜歡使用cron菜譜以其cron_d資源,其分離在不同的文件的cronjob定義見https://github.com/opscode-cookbooks/cron#readme - 我會渲染涵蓋所有任務的shell腳本,例如你的示例中的時間戳功能,它使cron文件更易於理解,並且可以手動測試/執行你的cron腳本)

+0

把\「幫助把雙引號放在雙引號內 –

1

問題似乎是你引用你的命令的方式,而不是我們荷蘭國際集團單蜱喜歡你現在:

command '/bin/date >> /var/log/mytask.log; 
    /usr/bin/php /var/www/mysite/index.php cli/cron 
    mytask "#{node["MyApp"]["IPAddress"]}" >> /var/log/mytask.log 2>&1' 
end 

周圍使用整件事雙引號,可能改變你的屬性使用分號,如:

command "/bin/date >> /var/log/mytask.log; 
    /usr/bin/php /var/www/mysite/index.php cli/cron 
    mytask #{node[:MyApp][:IPAddress]} >> /var/log/mytask.log 2>&1" 
end 

然後你也可避免轉義像字符"

+0

使用單蜱有幫助。謝謝 –