此问题已在此处有答案:
How to listen for multiple tcp connection using nc(7个回答)
3天前关闭。
这个主题在任何地方都被多次提及,但没有一个解决方案对我有效。
我有多个Linux主机,它们实际上是基于alpine
镜像的docker容器。我想在主机(容器)启动并准备就绪后,在后台进程中永久打开host-a
上的端口。该信号通知其他机器host-a
准备好执行某些操作。
并行地,host-b
和host-c
在bash循环中检查远程端口并等待该信号,然后继续。
我使用nc
命令在后台永久打开端口,并使用nc
检查远程端口是否打开。但不幸的是,我的解决方案不起作用,如果它起作用,那么它是不稳定的,并且在第一次检查后存在。
host-a:后台永久打开端口
nc -lk -v -p "$UP_SIGNAL_PORT" &
next-command-in-my-script...
host-b
和host-c
检查端口状态:
while ! nc -w 5 -z "$domain" "$UP_SIGNAL_PORT" 2>/dev/null; do
sleep 0.5
done
continue...
打开端口的命令似乎在第一次“ping”之后存在。
我也尝试了以下命令,但它的行为很奇怪:
[host-a]# nc -lk -p 12345 &
[host-a]# ps axu
1114 root 0:00 nc -lk -p 12345
[host-b]# nc -zv hello.com 12345
hello.com (172.19.0.2:12345) open
try to check the port again
[host-b]# nc -zv hello.com 12345
NO result
[host-a]# ps axu
1114 root 0:00 nc -lk -p 12345
the process is still running BUT the port seems to be closed
在第一次远程“ping”之后
这是怎么了?
我的nc
版本:
# nc
BusyBox v1.35.0 (2022-11-19 10:13:10 UTC) multi-call binary.
---更新---
按照你的建议,我尝试了这个,但不幸的是没有工作:
[host-a]# yes hello | nc -lk -v -p 12345 >/dev/null &
[1] 1125
[root@host-a.hello.com]# listening on [::]:12345 ...
[root@host-a.hello.com]# connect to [::ffff:172.19.0.2]:12345 from host-b.hello.com.docker_default:40841 ([::ffff:172.19.0.3]:40841)
nc: too many output retries
[1]+ Exit 1 yes hello | nc -lk -v -p 12345 > /dev/null
host-b:
[root@host-b.hello.com]# nc -zv host-a.hello.com 12345
host-a.hello.com (172.19.0.2:12345) open
[root@host-b.hello.com]# nc -zv host-a.hello.com 12345
no answer after the 1st ping
不幸的是,在第一次ping之后也存在这种情况。
1条答案
按热度按时间bzzcjhmw1#
将其 Package 在一个函数中,并在后台启动它:
或者使用
xinetd