我想获得一个随机未使用的端口,以便可以对其进行wait_for编码。最好是在动态端口范围内,但在这一点上,我并不挑剔。我使用的是Linux,并且不必与Windows或Mac兼容。
虽然此问题被标记为已回答,但如果有人可以简化此过程并且减少对shell的调用,则将其发布在下面。我不在乎这个问题是否已有四年历史了。

最佳答案

如注释中所述,您不想对端口进行wait_for,而是打开一个端口并等待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仅在关闭连接后退出。

关于linux - 我如何在ansible中获得随机未使用的端口,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63635553/

10-11 22:53
查看更多