2012-10-17 58 views
4

我有一個配方,將作業設置爲從EC2實例的crontab運行。這裏有一個我正在運行的食譜的例子:如何使用Chef在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的頂部?任何洞察讚賞!謝謝。

回答

-1

帶有與您的環境相對應的頂級密鑰的數據包。 Opscode維基對你如何做到這一點有一個快速的描述。 Data Bags and Environments按照您剛纔的例子:

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

另外,如果你想獲得看上你可以使用Templates與您的數據包,只是配方中調用模板你。這將適用於當你讓crontab調用與不同變量相同的函數時。通過這種方式,您可以隨時編輯模板,並且可以反映整個環境。

+0

您正在將廚師的環境概念與環境的殼概念混爲一談。 OP想要像在crontab頂部那樣設置環境變量 - 不要在cron資源中使用Chef環境屬性。 –

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 

廚師將遍歷您的哈希,你應該看到在sudo crontab -e

以下
# Chef Name: env 
env1=val1 
env2=val2 
* * * * * /path/to/job -someoption 

快速注意:在我的機器與廚師10.16.2,通過哈希可怕在cron節內,將返回語法錯誤。 syntax error, unexpected tASSOC, expecting '}'不是你應該直接傳入哈希,但我認爲值得一提,因爲別人可能會重複我的同一個錯誤。只要你把哈希值放到一個變量中,一切都按預期工作。

+3

我讀了你的答案,掩蓋了你的筆記,然後立即將相同的錯誤直接傳遞給哈希。它也可以工作,如果你將哈希語法封裝在parens中,就像這樣:'environment({'env1'=>'val1'})' – AndrewF