2012-10-17 4 views
4

EC2 인스턴스의 crontab에서 실행할 작업을 설정하는 제조법이 있습니다. 다음은 실행중인 요리법의 예입니다.crontab에서 Chef를 사용하여 환경 변수를 설정하는 방법은 무엇입니까?

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

위대한 작품입니다. 이 cron 작업 외에도 crontab에서 몇 가지 환경 변수를 설정하려고합니다. this을 읽으면 "path"속성을 사용하여 가능해야합니다. 그러나이를 구현하는 구체적인 예를 찾을 수 없습니다.

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

을하지만이 작동하지 않습니다

나는 시도했다. crontab 맨 위에 환경 변수를 설정하려면 어떻게합니까? 어떤 통찰력도 감사하겠습니다! 감사.

답변

-1

데이터 사용자 환경에 해당하는 최상위 키가있는 데이터 가방. Opscode wiki에는이 작업을 수행하는 방법에 대한 간단한 설명이 있습니다. 당신 앞의 예에 따라로서 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

당신이 찾고있는 대답은 Hash 객체를 기대하는 environment 속성입니다.

사용자 정의 환경 변수를 설정하기 위해 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 

간략한주의 사항 : Chef 10.16.2가 설치된 내 컴퓨터에서 해시 무언가를 전달 cron 스탠자 내의 ctly가 구문 오류를 리턴합니다. syntax error, unexpected tASSOC, expecting '}' 어쨌든 해시를 직접 전달해야하는 것은 아니지만 다른 누군가 내 실수를 반복 할 수 있으므로 언급할만한 가치가 있다고 생각했습니다. 해시를 변수에 던지면 모든 것이 예상대로 작동합니다.

+3

나는 당신의 대답을 읽고, 당신의 노트 위에 빛나고, 즉시 해시를 지나가는 똑같은 실수를 저질렀습니다. 다음과 같이 괄호 안에 해시 구문을 래핑하면 작동합니다 :'environment ({ 'env1'=> 'val1'})' – AndrewF