chef在cron资源上添加一个变量

时间:2015-06-30 15:13:44

标签: chef

我正在尝试使用chef中的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资源的命令部分添加变量/属性?

2 个答案:

答案 0 :(得分:1)

您需要使用双引号,以便Ruby变量插值有效:

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

(仅供参考:我个人更喜欢使用cron食谱及其cron_d资源,将cronjob定义分成不同的文件。请参阅https://github.com/opscode-cookbooks/cron#readme - 我会渲染涵盖所有文件的shell脚本任务,例如示例中的时间戳功能。它使cron文件更易于理解,您可以手动测试/执行您的cron脚本)

答案 1 :(得分: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

然后你也可以避免转义像"

这样的字符