2014-12-22 25 views
27

Üzerinde jenkins ile özel bir dockerfile yapmaya çalışıyorum. Netcat ile çirkin bir 'uyku 60' yapmak yerine 8080 numaralı bağlantı noktası açık olana kadar beklemek isterdim ama bash komut dosyaları ve netcat ile çok emin değil. İşte Netcat ile açık bir port için nasıl beklenir?

i yapmaya çalışıyorum şeyin bir örnektir: Bazı liman açılana kadar sonraki kontroldür bekletilmesine kısmını eklemek zorunda beklemek Netcat'i ayarlayamıyor

#!/bin/bash 

opened=0 

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

echo "Jenkins launched" 

cevap

52

yapılmış. Bu deneyin: Ben bulduk

#!/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

nihayet bunu yapmak için bir bukle senaryoyu kullandı! curl --output/dev/null --silent --head --fail http: // localhost: 8080; uyumak 1 && echo -n .; done; ' – FXG

+0

Bir öneri olarak, Jenkins yükseldiğinde daha hızlı yanıt almak için netcat komutundaki bağlantı zaman aşımını da azaltabilirsiniz. Bu, nc -G 1 -z localhost 8000'dir. –

+1

nc: geçersiz seçenek - 'z' – odiszapc

1

bu ortak yeterince sorun bir liman açmak için isteğe bağlı bir zaman aşımı ile beklemek için bir yardımcı program yazmak için:

# without timeout 
wait-port localhost:8080 

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

Bu açık kaynak ve github.com/dwmkerr/wait-port de kullanılabilir. Umarım diğerleri yararlı bulacaktır!

1

olarak here önerdi, ayrıca nc yüklü yoksa aşağıdakileri yapın ama olabilir sadece bash ve coreutils: `ederken:

#!/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"