Linux 如何在ansible中获取随机未使用的端口
我想获得一个随机未使用的端口,以便我可以Linux 如何在ansible中获取随机未使用的端口,linux,networking,ansible,port,Linux,Networking,Ansible,Port,我想获得一个随机未使用的端口,以便我可以等待它。最好是在动态端口范围内,但在这一点上,我并不挑剔。我使用的是Linux,它不必与windows或Mac兼容 虽然这个问题被标记为已回答,但如果有人有更简单的方法,并且对shell的调用更少,请将其发布在下面。我不在乎这个问题是否已经四年了。正如评论中所讨论的,您不想等待一个端口,而是打开一个端口,等待ping。 我不知道获取随机端口的简单方法,因此我编写了一个小shell脚本来查找: - hosts: all tasks: - name
等待它。最好是在动态端口范围内,但在这一点上,我并不挑剔。我使用的是Linux,它不必与windows或Mac兼容
虽然这个问题被标记为已回答,但如果有人有更简单的方法,并且对shell的调用更少,请将其发布在下面。我不在乎这个问题是否已经四年了。正如评论中所讨论的,您不想等待一个端口,而是打开一个端口,等待ping。
我不知道获取随机端口的简单方法,因此我编写了一个小shell脚本来查找:
- hosts: all
tasks:
- name: find port
shell: |
PORT=5000
while true; do
ss -tulpen | grep ":${PORT}" &> /dev/null
if [[ "$?" == "1" ]]; then
echo "${PORT}"
exit
fi
((PORT++))
done
args:
executable: /bin/bash
register: port
- name: print port
debug:
msg: "{{ port.stdout }}"
- name: wait for ping
shell: nc -l "{{ port.stdout }}"
- name: debug
debug:
msg: "Ping received"
这将查找端口,将其打印给您,然后打开端口,并使用netcat
等待ping。收到ping时,它会打印一条消息。
在ubuntu上进行了测试。由于不同的发行版提供不同的版本,您可能需要不同的netcat
(或者这里是nc
)参数
编辑:
将ping发送到端口后,您需要关闭TCP连接,因为只有在连接关闭后,netcat
才会退出。如果该端口在某个时间可用,或者你想永远等待它吗?我想等待一个树莓皮发出的ping,这样我就知道它准备好了。但是等待会一直等到有什么东西在那个端口监听。您需要等待
端口可用,以便知道服务器已启动。例如,安装并启动数据库,然后等待端口。你需要打开一个端口,然后等待ping的到来。很酷,谢谢。我仍然需要一个随机端口。