我有一个配方,可以将作业设置为从EC2实例的crontab运行。这是我正在运行的食谱的一个例子:
cron "examplejob" do
minute "0"
hour "2"
command "job"
user "job"
end
这很有效。除了这个cron作业,我还想在crontab中设置一些环境变量。阅读this,似乎应该可以使用"路径"属性。但是,我无法找到如何实现此功能的具体示例。
我试过了:
cron "env" do
path "MY_VAR=/path/for/variable"
end
但这不起作用。如何在crontab的顶部设置环境变量?有任何见解赞赏!感谢。
答案 0 :(得分:5)
我相信你要找的答案是environment
属性,它需要一个Hash对象。
请参阅http://docs.opscode.com/chef/resources.html#arguments和https://github.com/opscode/chef/commit/96ef7d770a7d898fdce097c7fda9039abf7bf485
要设置自定义环境变量,请编写以下内容
my_env_vars = {"env1" => "val1", "env2" => "val2"}
cron "env" do
environment my_env_vars
command "/path/to/job -someoption"
end
Chef将遍历您的哈希,您应该在sudo crontab -e
# Chef Name: env
env1=val1
env2=val2
* * * * * /path/to/job -someoption
快速注意:在使用Chef 10.16.2的计算机上,直接在cron
节中传入哈希将返回语法错误。 syntax error, unexpected tASSOC, expecting '}'
并不是说你应该直接传递哈希值,但我认为值得一提,因为别人可能会重复同样的错误。一旦将哈希值抛出到变量中,一切都按预期工作。
答案 1 :(得分:-1)
带有与您的环境相对应的顶级键的数据包。 Opscode wiki快速而直观地描述了如何做到这一点。 Data Bags and Environments根据您之前的示例:
cron "[node.chef_environment]" do
path "bag_item[node.chef_environment]["path_for_variable"]"
end
或者,如果您想获得幻想,可以将Templates与数据包一起使用,只需在配方中调用模板即可。当crontab使用不同的变量调用相同的函数时,这将适用。这样,您可以随时编辑模板,并且可以反映各种环境。