簡體   English   中英

如何檢查服務器是否正在運行

[英]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

一個好的解決方案是將 MRTG(一種用於 *NIX 的簡單圖形工具)與 ping-probe 腳本一起使用。 在谷歌上查找。

閱讀本文作為開始。

示例圖:

示例圖

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM