2014-10-11 5 views
0

Chef-client 11.12.8을 실행하고 있습니다.Bash 스크립트는 터미널에서 제대로 작동하지만 Chef에서 같은 스크립트가 실행되지 않습니다.

aws s3 ls s3://my-bucket/prod-builds/ 

나는 단지 S3 버킷에서 파일 목록을 얻기 위해 awscli 도구를 사용하고 있습니다 : 나는 다음 줄을 포함하는 bash는 스크립트를 작성했습니다. 요리사 클라이언트가 printf 문을 사용하여,이 같은 라인으로 bash는 스크립트를 실행할 때

2014-10-10 21:27:50 42081271 aragorn-38d5afe23f1fa09a991c4cdbcb8461ed8709d15f.tgz 

그러나, 나는 bash는 스크립트가 볼 : 내 터미널에서 수동 (우분투 14.04 LTS) 다음을 실행하면,이 출력을 얻을 출력 만 :

2014-10-10 

명령 출력에 공백이 있으면 chef-client가 혼란 스러울 수 있습니다. 나는이

execute "Download latest build" do 
    command "bash /path/to/my/script" 
    creates "/file/that/gets/created" 
    user "aragorn" 
    action :run 
end 

어떤 생각을 해결할 수있는 방법 :

여기 bash는 스크립트를 실행 내 요리사 조리법에서 선이다?

업데이트 : 요청으로, 여기에 내 스크립트의 일부입니다 :이 라인이 실행 있음을 확인했습니다

if [ -z "$gitCommitId" ]; then 
     # Take a filename like "aragorn-38d5afe23f1fa09a991c4cdbcb8461ed8709d15f.tgz" and extract the commitId from it 
     # Note that we take the topmost result 
     gitCommitId=$(aws s3 ls s3://my-bucket/prod-builds/ | sort -r | head -2 | sed -n '1!p' | awk -F "aragorn-" '{print $2}' | cut -d'.' -f 1) 
fi 

(printf 문이 출력을 사용),하지만 이상한 것은 내가 실행할 때이다 내 터미널에 직접 aws s3 ls s3://my-bucket/prod-builds/ | sort -r | head -2 | sed -n '1!p' | awk -F "aragorn-" '{print $2}' | cut -d'.' -f 1 명령 (또는 수동으로 내 터미널에서 스크립트를 실행), 잘 작동합니다. 하지만 요리사가 운영하는 gitCommitId은 아무 것도 설정하지 않습니다.

업데이트 # 2 : 나는 요리사와 터미널 간의 차이점을 테스트하기 위해 간단한 bash 스크립트를 작성했습니다. 나는 Chef run이 터미널에서 호출 할 때보 다 aws s3 ls s3://my-bucket/prod-builds을 호출하는 것과는 다른 결과를 출력한다는 것을 확인했습니다. 특히 터미널 통화에 있던 폴더를 S3 버킷에 두지 않았습니다. 나는 아직도 이것을 설명 할 수 없다.

내가에만 표시했다 빌드하도록하여 나에게 일관된 결과를 준 다음 줄을 사용하여 상처 없으며 폴더 : 우측에 저를 가리키는위한 @TejayCardon 및 @StephenC 모두

aws s3 ls s3://my-bucket/prod-builds/ | grep aragorn | sort -r | head -1 | cut -d'-' -f 4 | cut -d'.' -f 1 

특별 감사 방향!

+0

더 많은 정보가 필요합니다. 이것이 쉐프와 관련된 문제에 관해서는 루비 문제 일 가능성이 높지만 스크립트에 문제가있는 것은 거의 확실합니다. 우리가 전체 대본을 가지고 있다면 우리는 도울 수있을 것입니다. –

+0

제안 해 주셔서 감사합니다. 스크립트의 관련 부분으로 질문이 업데이트되었습니다. –

+1

'echo $ gitCommitId >>/tmp/testme'을'gitCommitId = .....'줄 바로 뒤에 추가합니다. 파일에 무엇이 들어 있는지 확인하십시오. 나는 가변적 인 범위 설정 문제에 직면하고 있다고 생각하고있다. –

답변

1

문제는 스크립트에서 거의 확실하게 발생하므로 스크립트가 실패하는 이유를 알아야합니다.

나는 bash가 실행되는 명령을 정확하게 볼 수

command "bash -x /path/to/my/script > /tmp/some_file 2>&1" 

command 속성을 변경하여 시작 했죠.


명령 출력에서 ​​공간의 존재는 요리사 클라이언트를 혼란 것으로 보인다.

귀하가 질문에 표시 한 내용은 그 결론을 뒷받침하지 않습니다. (그리고 그것은있을 법하지 않습니다.execute 자원 (아마도)를 기록 제외하고, 출력과 아무것도하지 않습니다.) 나는 문제가 그것을 실행하는 명령 중 하나 스크립트와 함께, 또는 의심 .... 또는 가정이 그

환경 변수, 현재 디렉토리 등에 대해하고있다


그래서 문제가이 파이프 라인에있는 것 같다 UPDATE :

aws s3 ls s3://my-bucket/prod-builds/ | \ 
     sort -r | \ 
     head -2 | \ 
     sed -n '1!p' | \ 
     awk -F "aragorn-" '{print $2}' | \ 
     cut -d'.' -f 1 

파이프 라인의 첫 번째 명령이 표준 출력에 출력을 생성하는지 확인하여 시작할 것입니다. (나는이 문제가 aws 명령이 필요로하는 환경 변수가 설정되지 않았다고 의심합니다.)

+0

가이드 라인을 보내 주셔서 감사합니다. 나는 결과를보고 새로운 것에 주목하고있다. 네가 쉐프 문제가 아니라고 생각한다. 내 대답에 내 대본의 일부를 게시 할 것입니다. –

+0

다시 한 번 도움을 주셔서 감사합니다. 그것은 나 자신의 bash 스크립트에서이 줄을 분리해야한다는 것을 깨닫게했다. 내 업데이트 # 2에서이 결과는 여전히 다른 결과를 낳았지만 지금은 직접 관찰 할 수 있습니다. 원래 스크립트에 약간의 변형을 사용하여 감았습니다. –

+0

AWS IAM 역할을 사용하고 있음을 명확히하고 싶기 때문에 환경 변수가 문제가되지 않습니다. 궁극적으로, 귀하의 제안 - 강조 표시된 줄 바꾸기 -가 정확했기 때문에 귀하의 답변을 정확하게 표시해 드리겠습니다. 다시 한 번 감사드립니다! –

관련 문제