Shell
如何告訴腳本等待程序開始接受埠上的請求?
我需要一個命令來等待程序開始接受特定埠上的請求。
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
.