2011-11-01 1 views
2

이것은 하나의 퍼즐입니다. 명령 줄에서 명령을 실행하여 원격으로 파일을 복사하면 완벽하게 작동합니다. Hudson을 호스팅하는 서버의 스크립트에서 동일한 명령을 실행하면 명령 줄에서 hudson으로 작업을 실행하는 것과 마찬가지로 완벽하게 실행됩니다. 나는 허드슨 작업에서 bash는 스크립트 내부 함수로 그 정확한 명령을 실행하는 경우, 그것은 실패 :허드슨에 의해 호출 된 스크립트에서 실행될 때 cp 명령이 실패합니다.

cp: cannot stat '/opt/flash_board.tar.gz': No such file or directory 

변수는 다음과 같이 정의된다

original_tarball=flash_board.tar.gz 

와 (범위 변수 확장은 스크립트에서 올바르게 작동합니다).

원래 명령은 다음과 같습니다 올바른 포트를 가리키는하지만, 정확히 같은 방법으로 실패

ssh -n -p 1601 -o stricthostkeychecking=no [email protected]$IP_ADDRESS cp /opt/$original_tarball /opt/$original_tarball.bak 

:

ssh -n -o stricthostkeychecking=no [email protected]$IP_ADDRESS ssh -n -o stricthostkeychecking=no 169.254.0.2 cp /opt/$original_tarball /opt/$original_tarball.bak 

나는 또한 그것을 시도했습니다.

참조를 위해 모든 변수가 유효한지 확인되었습니다. 원래는이 선수 교체의 오류라고 생각하지만이 경우 될 것 같지 않기 때문에 그때로 허드슨 자격 증명으로 실행 시도 :

sudo -u hudson ssh -n -o stricthostkeychecking=no [email protected]$IP_ADDRESS ssh -n -o stricthostkeychecking=no 169.254.0.2 cp /opt/$original_tarball /opt/$original_tarball.bak 

나는 똑같은 결과를 (작동) 얻을. 따라서이 명령이 Hudson 작업에서 실행될 때만 실패합니다.

다음은 이벤트의 순서입니다 :

  • 허드슨 작업이 쉘 스크립트를 호출 & 매개 변수를 설정합니다.
  • 스크립트 안에 함수는 두 번째 임베디드 아라고에 SPI 버스를 통해 임베디드 몬테 (리눅스) 보드에서 원격으로 파일을 복사하려고 (리눅스) 보드
  • 두 보드가 같은 마더 보드에 물리적으로, 그러나 거기 직렬 콘솔 세션을 통하는 경우를 제외하고는 Arago 보드에 직접 액세스 할 수 없습니다 (이는 실행 가능하지 않습니다. 이는 네트워크에서 실행되는 자동화 작업입니다).

ssh와 -p 1601 (Arago에 올바른 포트)을 사용하여 이것을 시도했습니다.

원격 파일을 다른 파일 확장자를 가진 원격 파일과 동일한 위치에 복사하는 데 scp를 사용할 수 있습니까? 같은

뭔가 :

scp -o stricthostkeychecking=no [email protected]$IP_ADDRESS /opt/$original_tarball /opt/$original_tarball.bak 

은 내가 devs를 몇이 살펴보고 그들이뿐만 아니라 난처한 상황에 빠진했다 있었다. 누구나 어떤 아이디어 (A)가 실패했는지 & (B) 어떻게 해결해야하는지 알 수 있습니다. 원격 컴퓨터에서 로컬로 실행되는 스크립트를 작성할 수 있다고 확신하지만, 꼭 필요한 것은 아닌 것 같습니다. 내가 SPI 버스 (169.254.0.2)를 통해 갈 필요가 없습니다 의미합니다 (몬테 보드의 동일한 명령을 실행하면

아, 그리고, 그것은 허드슨 작업에서 완벽하게 작동합니다.

+0

배포 다이어그램 pls? 다섯 번째 코드 블록에서 이중 ssh가 혼란 스럽습니다. 나는 ssh에서 -vv를 사용하고 차이점을 찾기 위해 가능한 한 테스트 스크립트에서 많은 환경 정보 (PATH,'cp 등)를 출력한다. – themel

+0

@ themel. 나는 너무 새로워서 이미지를 올릴 수 없다. 이중 ssh를 사용하면 허드슨 서버에서 SPI 링크를 통해 Arago 보드와 통신하는 Montevista 보드로 이동할 수 있으므로 두 번째 ssh는 169.254.0.2로 넘어갑니다. 나는 Arago 보드에 직접 접근 할 수있는 방법이 없다. 1601 번 포트를 통과하거나 거기에 도착하기 위해 이중 ssh를해야한다. (둘다 다른 bash 명령을 여러 개 사용하면 괜찮을 것이다.하지만 조심해야한다. 두 버전 모두에서 다른 버전의 busybox 임). – delliottg

+0

파일에 대한 사용 권한을 확인하십시오. –

답변

1

이렇게이 질문과는 완전히 무관 한 것으로 판명되었습니다. 테스트 허드슨 스크립트로 문제를 해결하고 이전 스크립트에서 점점 더 복잡해지면서 이전 스크립트와 마찬가지로 실패했습니다.

그것은 조종사 과실을 밝혀졌다, 나는 그것이 어떤 보드 애매 모호 지점으로 if 문에 전달 된 변수를 두 기판 사이에 (아라고 & 몬테)를 구별 할 수있는 if 문을 작성하고 밖으로 추출했던 가 전달 되었기 때문에 if 논리가 항상 첫 번째 경기를 잡았고 (Aeggo 보드에서 복사하려고했던 플래시 스크립트는 Montevista 보드에 존재하지 않았다 (글쎄, 그것은 다른 이름을 가지고있다). 반환 된 오류는 절대적으로 정확했습니다.

스핀 업과 죄송합니다. 도와 주신 모든 노력에 감사드립니다.

0

cp : '/opt/flash_board.tar'을 통계 할 수 없습니다.gz ': 해당 파일 또는 디렉토리 없음

이것은 허드슨이 파일을 볼 수 없다는 의미입니다. 난 그 쉘 스크립트에서 ls -la /opt을 할 것이다. 그러면 /opt 디렉토리의 사용 권한과 스크립트에서 해당 파일을 나열 할 수 있는지 여부가 표시됩니다.

허드슨 컴퓨터에서도 du -f을 실행하고 /opt 디렉토리가 원격 마운트인지 아니면 문제가 될 수 있는지 확인하십시오.

이미 Hudson 작업을 실행하고 작업 영역 디렉토리에서 실행하는 사용자로 로그인했다고하셨습니다.

지금 당장은 디렉터리 사용 권한이 문제라고 생각합니다.

+0

귀하의 추천은 솔루션의 루트였습니다. 필자가 제안한대로 테스트 스크립트를 작성한 다음 명시 적 이름으로 복사를 추가했습니다. 완벽하게 작동했습니다. 그런 다음 계속 작동하는 변수 이름을 추가 했으므로 if 문을 추가하여 보드를 구분하고 보일라가 실패했습니다. 전체 스크립트에 -xv를 설정하고 if 문이 항상 처음 제시된 옵션을 선택한다는 것을 알았습니다. 이것은 2 if 문이 사실상 동일하기 때문에 식별하기 어려웠지만 그 차이점이 결국 나에게 뛰어 들었습니다. 아이디어를 가져 주셔서 감사합니다! – delliottg

0

잘못되는 명백한 방법은 어떻게 든 잘못된 시스템에서 실행되는 것입니다. 아마도 줄 길이 제한이나 이상한 인용 문제 때문일 수 있습니다.

올바른 컴퓨터가 있는지 보려면 … uname -a 또는 … hostname -f으로 명령을 변경해보십시오. 또는 … cp /proc/cpuinfo /tmp/this-machine을 입력 한 다음 어떤 컴퓨터가 파일을 가져 왔는지 확인하십시오.

편집 : OP가 자신의 질문에 답변했습니다. 비슷한 문제가있는 모든 방문객에게 도움이 될 수 있도록 여기에 남겨 두겠습니다. 나는 그것이 일어날 수있는 이유에 대해 "실행중인 명령을"실행하지 않거나 추가하지 않으면 안된다고 생각합니다.

관련 문제