首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何等待与netcat的开放端口?

如何等待与netcat的开放端口?
EN

Stack Overflow用户
提问于 2014-12-22 09:27:27
回答 11查看 63.2K关注 0票数 87

我试着用詹金斯做一个定制的码头文件。我会等到端口8080打开,而不是用netcat做一个丑陋的‘睡眠60’,但我对bash脚本和netcat并不很有信心。

下面是我试图做的事情的一个例子:

代码语言:javascript
复制
#!/bin/bash
 
opened=0
 
while [ "$opened"  == "0" ]; do
  echo "Waiting jenkins to launch on 8080..."
  nc -vz localhost 8080
done
 
echo "Jenkins launched"
EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2014-12-22 10:41:10

您不能将netcat设置为等待某个端口打开,因此必须在下一次检查之前添加等待部分。试试这个:

代码语言:javascript
复制
#!/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"
票数 144
EN

Stack Overflow用户

发布于 2018-04-27 04:51:37

我建议采用以下一种方式:

代码语言:javascript
复制
## 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 (如果在给定时间内没有建立连接)。

票数 64
EN

Stack Overflow用户

发布于 2017-05-29 15:31:39

我发现这是一个足够常见的问题,可以编写一个实用程序来等待端口打开,并有一个可选的超时:

代码语言:javascript
复制
# without timeout
wait-port localhost:8080

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

它是开源的,可以在Github.com/dwmkerr/等待端口上获得。希望其他人会发现它有用!

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27599839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档