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的到来。很酷,谢谢。我仍然需要一个随机端口。