4

我有一个将作业设置为从 EC2 实例的 crontab 运行的配方。这是我正在运行的食谱示例:

cron "examplejob" do
 minute "0"
 hour "2"
 command "job"
 user "job"
end

这很好用。除了这个 cron 作业,我还想在 crontab 中设置一些环境变量。读到这里,似乎应该可以使用“路径”属性。但是,我找不到如何实现这一点的具体示例。

我试过了:

cron "env" do
 path "MY_VAR=/path/for/variable"
end

但这不起作用。如何在 crontab 顶部设置环境变量?任何见解表示赞赏!谢谢。

4

2 回答 2

5

我相信您正在寻找的答案是environment属性,它需要一个 Hash 对象。

请参阅http://docs.opscode.com/chef/resources.html#argumentshttps://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 '}'并不是说你应该直接传递哈希,但我认为值得一提,因为其他人可能会重复我同样的错误。只要将哈希值放入变量中,一切都会按预期进行。

于 2013-02-25T22:12:54.327 回答
-1

具有与您的环境相对应的顶级密钥的数据包。Opscode wiki 对如何执行此操作进行了快速且中肯的描述。数据包和环境根据您之前的示例:

cron "[node.chef_environment]" do
 path "bag_item[node.chef_environment]["path_for_variable"]"
end

或者,如果你想变得花哨,你可以在你的数据包中使用模板,然后在配方中调用你的模板。当您让 crontab 使用不同的变量调用相同的函数时,这将适用。这样您就可以在需要时编辑模板,并且它会反映在不同的环境中。

于 2012-10-17T20:57:16.320 回答