linux - 如何在ansible中获得一个随机未使用的端口

标签 linux networking ansible port

我想获得一个随机未使用的端口,以便我可以 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/

相关文章:

linux - 我如何检测 Perl 中的符号链接(symbolic link)已损坏?

java - 以编程方式监听特定 url 的网络调用

java - 如何使用现有的 Java 类运行服务器来接受来自另一个应用程序的 API 调用?

linux - 使用 Ansible 在特定时间安排命令

linux - cpp 的 usleep 函数有多不准确?

linux - 配置minikube时出现磁盘空间错误如何解决

linux - 如何格式化/etc/passwd 中用户帐户的输出

c++ - 为什么 UDP 套接字关闭不会导致选择返回?

action - Ansible - 打印消息 - 调试 : msg ="line1\n {{ var2 }}\n line3 with var3 = {{ var3 }}"

ansible - 如何循环 Ansible 变量名称