如何在等待Web服務器響應的bash中創建一個循環?如何在等待Web服務器響應的bash中創建一個循環?
它應該打印一個「。」每10秒鐘左右一次,然後等到服務器開始響應。
更新,此代碼測試如果我從服務器得到良好的響應。
if curl --output /dev/null --silent --head --fail "$url"; then echo "URL exists: $url" else echo "URL does not exist: $url" fi
如何在等待Web服務器響應的bash中創建一個循環?如何在等待Web服務器響應的bash中創建一個循環?
它應該打印一個「。」每10秒鐘左右一次,然後等到服務器開始響應。
更新,此代碼測試如果我從服務器得到良好的響應。
if curl --output /dev/null --silent --head --fail "$url"; then echo "URL exists: $url" else echo "URL does not exist: $url" fi
相結合的chepner的回答這個問題,這個工作對我來說:
until $(curl --output /dev/null --silent --head --fail http://myhost:myport); do
printf '.'
sleep 5
done
如果你需要檢查服務器是否可用,原因是在重新啓動或別的東西,你可以嘗試做一個wget的服務器和解析響應或錯誤,如果你得到一個200,甚至是404服務器已啓動,您可以使用--timeout = seconds更改wget超時,您可以將超時設置爲10秒並進行循環,直到響應中的grep結果爲止。
我不知道這是你正在尋找或真的需要bash代碼。
有趣的謎題。如果你與你的客戶沒有訪問或異步API,你可以嘗試grepping你的TCP套接字是這樣的:
until grep '***IPV4 ADDRESS OF SERVER IN REVERSE HEX***' /proc/net/tcp
do
printf '.'
sleep 1
done
但是,這是一個忙等待1秒的間隔。您可能需要比這更多的分辨率。這也是全球性的。如果與該服務器建立了另一個連接,則結果無效。
使用反引號` `
的是outdated。改爲使用$()
:
until $(curl --output /dev/null --silent --head --fail http://myhost:myport); do
printf '.'
sleep 5
done
httping對此很好。簡單,乾淨,安靜。
while ! httping -qc1 http://myhost:myport ; do sleep 1 ; done
while/until etc is a personal pref。
再想一想,永遠是一段很長的時間...'因爲我在'seq 60'; do httping -qc1 http:// myhost:myport && echo && break sleep 5 echo -n $ {i} .. 完成 ' – 2015-04-03 17:22:23
wait-on
是一個跨平臺的命令行工具和Node.js的API,它會等待文件,港口,插座,和HTTP(S)資源變爲可用:https://github.com/jeffbski/wait-on
例如,等待:8080 5s,如果成功則執行NEXT_CMD。
wait-on -t 5000 http-get://localhost:8080/foo && NEXT_CMD
您能更具體地瞭解您如何等待服務器響應嗎? – chepner 2012-08-10 15:33:34
我會認爲服務器還沒有準備好,只要它沒有回覆,或者回復的內容與200響應不同。 – sorin 2012-09-06 13:51:32