我试着用詹金斯做一个定制的码头文件。我会等到端口8080打开,而不是用netcat做一个丑陋的‘睡眠60’,但我对bash脚本和netcat并不很有信心。
下面是我试图做的事情的一个例子:
#!/bin/bash
opened=0
while [ "$opened" == "0" ]; do
echo "Waiting jenkins to launch on 8080..."
nc -vz localhost 8080
done
echo "Jenkins launched"发布于 2014-12-22 10:41:10
您不能将netcat设置为等待某个端口打开,因此必须在下一次检查之前添加等待部分。试试这个:
#!/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"发布于 2018-04-27 04:51:37
我建议采用以下一种方式:
## netcat version:
timeout 22 sh -c 'until nc -z $0 $1; do sleep 1; done' stackoverflow.com 443
## pure bash version:
timeout 22 bash -c 'until printf "" 2>>/dev/null >>/dev/tcp/$0/$1; do sleep 1; done' stackoverflow.com 443这两个命令在连接建立后立即退出,每秒钟试一次,最多22秒钟。
注意,由于timeout命令,当端口可访问时,退出代码是0,否则是124 (如果在给定时间内没有建立连接)。
发布于 2017-05-29 15:31:39
我发现这是一个足够常见的问题,可以编写一个实用程序来等待端口打开,并有一个可选的超时:
# without timeout
wait-port localhost:8080
# timeout after a minute
wait-port -t 60000 localhost:8080它是开源的,可以在Github.com/dwmkerr/等待端口上获得。希望其他人会发现它有用!
https://stackoverflow.com/questions/27599839
复制相似问题