[英]How to check if a server is running
我想使用 ping 來檢查服務器是否已啟動。 我將如何執行以下操作:
ping $URL
if [$? -eq 0]; then
echo "server live"
else
echo "server down"
fi
我將如何完成上述操作? 另外,我將如何使它在第一個 ping 響應時返回 0,或者如果前十個 ping 失敗則返回錯誤? 或者,是否有更好的方法來完成我在上面嘗試做的事情?
我建議不要只使用ping
。 它通常可以檢查服務器是否在線,但您無法檢查該服務器上的特定服務。
更好地使用這些替代方案:
您可以使用curl
並檢查http_response
這樣的網絡服務
check=$(curl -s -w "%{http_code}\n" -L "${HOST}${PORT}/" -o /dev/null)
if [[ $check == 200 || $check == 403 ]]
then
# Service is online
echo "Service is online"
exit 0
else
# Service is offline or not working correctly
echo "Service is offline or not working correctly"
exit 1
fi
在哪里
HOST
= [您主機的 ip 或 dns-name]
(可選) PORT
= [可選端口; 不要忘記開始:
]
200
是正常成功http_response
403
是一個重定向,例如可能到登錄頁面,所以也可以訪問,很可能意味着服務運行正常
-s
靜默或安靜模式。
-L
定義位置
-w
以哪種格式顯示響應
-> %{http_code}\\n
我們只想要 http_code
-o
輸出文件
-> /dev/null
將任何輸出重定向到 /dev/null,因此它不會寫入 stdout 或check
變量。 通常你會在 http_response 之前獲得完整的 html 源代碼,所以你也必須保持沉默。
雖然curl
對我來說似乎是 Webservices 的最佳選擇,因為它確實在檢查服務的網頁是否正常工作,
nc
僅可用於快速檢查目標上的特定端口是否可訪問(並假設這也適用於服務)。
這里的優點是可設置的超時時間,例如 1 秒,而 curl 可能需要更長的時間才能失敗,當然您也可以檢查不是SSH
端口22
等網頁的服務。
nc -4 -d -z -w 1 &{HOST} ${PORT} &> /dev/null
if [[ $? == 0 ]]
then
# Port is reached
echo "Service is online!"
exit 0
else
# Port is unreachable
echo "Service is offline!"
exit 1
fi
在哪里
HOST
= [您主機的 ip 或 dns-name]
PORT
= [不是可選的端口]
-4
強制 IPv4(或-6
用於 IPv6)
-d
不要嘗試從標准輸入讀取
-z
只聽,不發送數據
-w
超時
如果連接和 stdin 空閑時間超過 timeout 秒,則連接將被靜默關閉。 (在這種情況下nc
將退出 1 -> 失敗。)
(可選) -n
如果您只使用 IP:不要在任何指定的地址、主機名或端口上執行任何 DNS 或服務查找。
&> /dev/null
不打印命令的任何輸出
你可以使用這樣的東西 -
serverResponse=`wget --server-response --max-redirect=0 ${URL} 2>&1`
if [[ $serverResponse == *"Connection refused"* ]]
then
echo "Unable to reach given URL"
exit 1
fi
將 -c 選項與 ping 一起使用,它只會 ping URL 給定的次數或直到超時
if ping -c 10 $URL; then
echo "server live"
else
echo "server down"
fi
簡寫:
ping -c5 $SERVER || echo 'Server down'
其他腳本需要它嗎? 或者試圖破解一些簡單的監控工具? 在這種情況下,您可能需要查看 Pingdom: https : //www.pingdom.com/ 。
我使用以下腳本函數來檢查服務器是否在線。 當您要檢查多個服務器時,它很有用。 該功能隱藏 ping 輸出,您可以單獨處理服務器在線或服務器關閉的情況。
#!/bin/bash
#retry count of ping request
RETRYCOUNT=1;
#pingServer: implement ping server functionality.
#Param1: server hostname to ping
function pingServer {
#echo Checking server: $1
ping -c $RETRYCOUNT $1 > /dev/null 2>&1
if [ $? -ne 0 ]
then
echo $1 down
else
echo $1 live
fi
}
#usage example, pinging some host
pingServer google.com
pingServer server1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.