我正在尝试使用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资源的命令部分添加变量/属性?
答案 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
然后你也可以避免转义像"