2014-12-22 5 views
27

젠킨스가있는 사용자 정의 도커 파일을 만들려고합니다. 나는 8080 포트가 netcat으로 추악한 'sleep 60'을하는 대신 열릴 때까지 기다릴 것이지만, bash 스크립트와 netcat에 대해서는별로 확신하지 못한다. 여기 netcat을 사용하여 열린 포트를 기다리는 방법은 무엇입니까?

내가 할 노력하고있어의 예입니다 : 당신은 어떤 포트가 열려 때까지 다음 검사가되기 전에 대기에 대한 부분을 추가해야하므로, 기다릴 netcat을 설정할 수 없습니다

#!/bin/bash 

opened=0 

while [ "$opened" == "0" ]; do 
    echo "Waiting jenkins to launch on 8080..." 
    nc -vz localhost 8080 
done 

echo "Jenkins launched" 

답변

52

만든. 이 시도 : 내가 찾은

#!/bin/bash 

echo "Waiting jenkins to launch on 8080..." 

while ! nc -z localhost 8080; do 
    sleep 0.1 # wait for 1/10 of the second before check again 
done 

echo "Jenkins launched" 
+5

마지막으로 내가 할 수있는 컬 스크립트를 사용! curl - 출력/dev/null - silent --head --fail http : // localhost : 8080; 잠을 자다 1 && echo -n .; done;' – FXG

+0

제안 사항으로, 젠킨스 (Jenkins)가 올라 갔을 때보다 빠른 응답을 얻기 위해 netcat 명령에서 연결 시간 제한을 줄일 수도 있습니다. 그것은'nc -G 1 -z localhost 8000'입니다. –

+1

nc : 잘못된 옵션 - 'z' – odiszapc

1

이 일반적인 충분히 문제가 포트가 열리기를 선택 시간 초과, 기다릴 유틸리티를 작성 :

# without timeout 
wait-port localhost:8080 

# timeout after a minute 
wait-port -t 60000 localhost:8080 

그것은 오픈 소스와 github.com/dwmkerr/wait-port에서 사용할 수입니다. 다행히도 다른 사람들이 유용하다고 생각합니다!

1

바와 같이 here 제안, 당신은 또한 당신이 nc가 설치되지 않은 경우 다음을 수행 할 수도 있지만 단지 bashcoreutils :`동안 :

#!/bin/bash 

echo "Waiting jenkins to launch on 8080..." 

while ! timeout 1 bash -c "echo > /dev/tcp/localhost/8080"; do 
    sleep 1 
done 

echo "Jenkins launched"