Shell

如何告訴腳本等待程序開始接受埠上的請求?

  • February 4, 2022

我需要一個命令來等待程序開始接受特定埠上的請求。

linux中有什麼東西可以做到嗎?

while (checkAlive -host localhost -port 13000 == false)
 do some waiting

...

查看伺服器是否接受連接的最佳測試是實際嘗試連接。對伺服器使用的任何協議都使用正常客戶端,並嘗試使用 no-op 命令。

如果你想要一個輕量級的 TCP 或 UDP 客戶端,你可以簡單地從 shell 驅動,使用netcat。如何編寫對話取決於協議;許多協議讓伺服器在某個輸入上關閉連接,然後 netcat 將退出。

while ! echo exit | nc localhost 13000; do sleep 10; done

您也可以在建立連接後告訴 netcat 退出。如果沒有連接,則返回 1,如果有,則返回 0,因此我們否定它的輸出。根據您的 netcat 版本,它可能支持以下一個或兩個命令:

while ! nc -z localhost 13000 </dev/null; do sleep 10; done
while ! nc -q 1 localhost 13000 </dev/null; do sleep 10; done

另一種方法是等待伺服器程序打開偵聽套接字。

while netstat -lnt | awk '$4 ~ /:13000$/ {exit 1}'; do sleep 10; done

如果您在 Mac OS 上,netstat 使用稍微不同的輸出格式,因此您需要以下內容:

while netstat -lnt | awk '$4 ~ /\.13000$/ {exit 1}'; do sleep 10; done

或者您可能希望針對特定的程序 ID:

while ! lsof -n -Fn -p $pid | grep -q '^n.*:13000$'; do sleep 10; done

如果沒有使用ptrace.

引用自:https://unix.stackexchange.com/questions/5277