本教學教你怎樣在 Linux 終端快速檢測一個網站是否宕機。
你可能已經了解了一些類似的命令,像 ping
、curl
和 wget
。我們在本教學中又加入了一些其他命令。同時,我們也加入了不同的選項來檢測單個和多個主機的資訊。
本文將幫助你檢測網站是否宕機。但是如果你在維護一些網站,希望網站宕掉時得到實時的報警,我推薦你去使用實時網站監控工具。這種工具有很多,有些是免費的,大部分收費。根據你的需求,選擇合適的工具。在後續的文章中我們會涉及這個主題。
fping 命令 是一個類似 ping
的程式,使用網際網路控制訊息協定(ICMP)的回應請求報文來判斷目標主機是否能回應。fping
與 ping
的不同之處在於它可以並行地 ping
任意數量的主機,也可以從一個文字檔案讀入主機名稱。fping
傳送一個 ICMP 回應請求後不等待目標主機響應,就以輪詢模式向下一個目標主機發請求。如果一個目標主機有響應,那麼它就被標記為存活的,然後從檢查目標列表裡去掉。如果一個目標主機在限定的時間和(或)重試次數內沒有響應,則被指定為網站無法到達的。
# fping 2daygeek.com linuxtechnews.com magesh.co.in2daygeek.com is alivelinuxtechnews.com is alivemagesh.co.in is alive
HTTPie(讀作 aitch-tee-tee-pie)是一個命令列 HTTP 用戶端。httpie 是一個可以與 web 服務通過 CLI 進行互動的現代工具。httpie 工具提供了簡單的 http
命令,可以通過傳送簡單的、自然語言語法的任意 HTTP 請求得到多彩的結果輸出。HTTPie 可以用來對 HTTP 伺服器進行測試、偵錯和基本的互動。
# http 2daygeek.comHTTP/1.1 301 Moved PermanentlyCF-RAY: 535b66722ab6e5fc-LHRCache-Control: max-age=3600Connection: keep-aliveDate: Thu, 14 Nov 2019 19:30:28 GMTExpires: Thu, 14 Nov 2019 20:30:28 GMTLocation: https://2daygeek.com/Server: cloudflareTransfer-Encoding: chunkedVary: Accept-Encoding
curl 命令 是一個用於在伺服器間通過支援的協定(DICT、FILE、FTP、FTPS、GOPHER、HTTP、HTTPS、IMAP、IMAPS、LDAP、LDAPS、POP3、POP3S、RTMP、RTSP、SCP、SFTP、SMTP、SMTPS、TELNET 和 TFTP)傳輸資料的工具。這個工具不支援使用者互動。curl
也支援使用代理、使用者認證、FTP 上傳、HTTP POST 請求、SSL 連線、cookie、斷點續傳、Metalink 等等。curl
由 libcurl 庫提供所有與傳輸有關的能力。
# curl -I https://www.magesh.co.inHTTP/2 200date: Thu, 14 Nov 2019 19:39:47 GMTcontent-type: text/htmlset-cookie: __cfduid=db16c3aee6a75c46a504c15131ead3e7f1573760386; expires=Fri, 13-Nov-20 19:39:46 GMT; path=/; domain=.magesh.co.in; HttpOnlyvary: Accept-Encodinglast-modified: Sun, 14 Jun 2015 11:52:38 GMTx-cache: HIT from Backendcf-cache-status: DYNAMICexpect-ct: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"server: cloudflarecf-ray: 535b74123ca4dbf3-LHR
如果你只想看 HTTP 狀態碼而不是返回的全部資訊,用下面的 curl
命令:
# curl -I "www.magesh.co.in" 2>&1 | awk '/HTTP\// {print $2}' 200
如果你想看一個網站是否宕機,用下面的 bash 指令碼:
# vi curl-url-check.sh#!/bin/bashif curl -I "https://www.magesh.co.in" 2>&1 | grep -w "200\|301" ; then echo "magesh.co.in is up"else echo "magesh.co.in is down"fi
當你把指令碼內容新增到一個檔案後,執行檔案,檢視結果:
# sh curl-url-check.shHTTP/2 200magesh.co.in is up
如果你想看多個網站的狀態,使用下面的 shell 指令碼:
# vi curl-url-check-1.sh#!/bin/bashfor site in www.google.com google.co.in www.xyzzz.comdoif curl -I "$site" 2>&1 | grep -w "200\|301" ; then echo "$site is up"else echo "$site is down"fiecho "----------------------------------"done
當你把上面指令碼內容新增到一個檔案後,執行檔案,檢視結果:
# sh curl-url-check-1.shHTTP/1.1 200 OKwww.google.com is up----------------------------------HTTP/1.1 301 Moved Permanentlygoogle.co.in is up----------------------------------www.xyzzz.com is down----------------------------------
wget 命令(前身是 Geturl)是一個自由開源的命令列下載工具,通過 HTTP、HTTPS、FTP 和其他廣泛使用的網際網路協定獲取檔案。wget
是非互動式的命令列工具,由 World Wide Web 和 get 得名。wget
相對於其他工具來說更優秀,功能包括後台執行、遞回下載、多檔案下載、斷點續傳、非互動式下載和大檔案下載。
# wget -S --spider https://www.magesh.co.inSpider mode enabled. Check if remote file exists.--2019-11-15 01:22:00-- https://www.magesh.co.in/Loaded CA certificate '/etc/ssl/certs/ca-certificates.crt'Resolving www.magesh.co.in (www.magesh.co.in)… 104.18.35.52, 104.18.34.52, 2606:4700:30::6812:2334, …Connecting to www.magesh.co.in (www.magesh.co.in)|104.18.35.52|:443… connected.HTTP request sent, awaiting response… HTTP/1.1 200 OK Date: Thu, 14 Nov 2019 19:52:01 GMT Content-Type: text/html Connection: keep-alive Set-Cookie: __cfduid=db73306a2f1c72c1318ad4709ef49a3a01573761121; expires=Fri, 13-Nov-20 19:52:01 GMT; path=/; domain=.magesh.co.in; HttpOnly Vary: Accept-Encoding Last-Modified: Sun, 14 Jun 2015 11:52:38 GMT X-Cache: HIT from Backend CF-Cache-Status: DYNAMIC Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" Server: cloudflare CF-RAY: 535b85fe381ee684-LHRLength: unspecified [text/html]Remote file exists and could contain further links,but recursion is disabled -- not retrieving.
如果你只想看 HTTP 狀態碼而不是返回的全部結果,用下面的 wget
命令:
# wget --spider -S "www.magesh.co.in" 2>&1 | awk '/HTTP\// {print $2}' 200
如果你想看一個網站是否宕機,用下面的 bash 指令碼:
# vi wget-url-check.sh#!/bin/bashif wget --spider -S "https://www.google.com" 2>&1 | grep -w "200\|301" ; then echo "Google.com is up"else echo "Google.com is down"fi
當你把指令碼內容新增到一個檔案後,執行檔案,檢視結果:
# wget-url-check.shHTTP/1.1 200 OKGoogle.com is up
如果你想看多個網站的狀態,使用下面的 shell 指令碼:
# vi curl-url-check-1.sh#!/bin/bashfor site in www.google.com google.co.in www.xyzzz.comdoif wget --spider -S "$site" 2>&1 | grep -w "200\|301" ; then echo "$site is up"else echo "$site is down"fiecho "----------------------------------"done
當你把上面指令碼內容新增到一個檔案後,執行檔案,檢視結果:
# sh wget-url-check-1.shHTTP/1.1 200 OKwww.google.com is up----------------------------------HTTP/1.1 301 Moved Permanentlygoogle.co.in is up----------------------------------www.xyzzz.com is down----------------------------------
lynx 是一個在可定址游標字元單元終端上使用的基於文字的高度可配的 web 瀏覽器,它是最古老的 web 瀏覽器並且現在仍在活躍開發。
# lynx -head -dump http://www.magesh.co.inHTTP/1.1 200 OKDate: Fri, 15 Nov 2019 08:14:23 GMTContent-Type: text/htmlConnection: closeSet-Cookie: __cfduid=df3cb624024b81df7362f42ede71300951573805662; expires=Sat, 14-Nov-20 08:14:22 GMT; path=/; domain=.magesh.co.in; HttpOnlyVary: Accept-EncodingLast-Modified: Sun, 14 Jun 2015 11:52:38 GMTX-Cache: HIT from BackendCF-Cache-Status: DYNAMICServer: cloudflareCF-RAY: 535fc5704a43e694-LHR
如果你只想看 HTTP 狀態碼而不是返回的全部結果,用下面的 lynx
命令:
# lynx -head -dump https://www.magesh.co.in 2>&1 | awk '/HTTP\// {print $2}' 200
如果你想看一個網站是否宕機,用下面的 bash 指令碼:
# vi lynx-url-check.sh#!/bin/bashif lynx -head -dump http://www.magesh.co.in 2>&1 | grep -w "200\|301" ; then echo "magesh.co.in is up"else echo "magesh.co.in is down"fi
當你把指令碼內容新增到一個檔案後,執行檔案,檢視結果:
# sh lynx-url-check.shHTTP/1.1 200 OKmagesh.co.in is up
如果你想看多個網站的狀態,使用下面的 shell 指令碼:
# vi lynx-url-check-1.sh#!/bin/bashfor site in http://www.google.com https://google.co.in http://www.xyzzz.comdoif lynx -head -dump "$site" 2>&1 | grep -w "200\|301" ; then echo "$site is up"else echo "$site is down"fiecho "----------------------------------"done
當你把上面指令碼內容新增到一個檔案後,執行檔案,檢視結果:
# sh lynx-url-check-1.shHTTP/1.0 200 OKhttp://www.google.com is up----------------------------------HTTP/1.0 301 Moved Permanentlyhttps://google.co.in is up----------------------------------www.xyzzz.com is down----------------------------------
ping 命令(Packet Internet Groper)是網路工具的代表,用於在網際網路協定(IP)的網路中測試一個目標主機是否可用/可連線。通過向目標主機傳送 ICMP 回應請求報文包並等待 ICMP 回應響應報文來檢測主機的可用性。它基於已傳送的包、接收到的包和丟失了的包來統計結果資料,通常包含最小/平均/最大響應時間。
# ping -c 5 2daygeek.comPING 2daygeek.com (104.27.157.177) 56(84) bytes of data.64 bytes from 104.27.157.177 (104.27.157.177): icmp_seq=1 ttl=58 time=228 ms64 bytes from 104.27.157.177 (104.27.157.177): icmp_seq=2 ttl=58 time=227 ms64 bytes from 104.27.157.177 (104.27.157.177): icmp_seq=3 ttl=58 time=250 ms64 bytes from 104.27.157.177 (104.27.157.177): icmp_seq=4 ttl=58 time=171 ms64 bytes from 104.27.157.177 (104.27.157.177): icmp_seq=5 ttl=58 time=193 ms--- 2daygeek.com ping statistics ---5 packets transmitted, 5 received, 0% packet loss, time 13244msrtt min/avg/max/mdev = 170.668/213.824/250.295/28.320 ms
telnet
命令是一個使用 TELNET 協定用於 TCP/IP 網路中多個主機相互通訊的古老的網路協定。它通過 23 埠連線其他裝置如計算機和網路裝置。telnet
是不安全的協定,現在由於用這個協定傳送的資料沒有經過加密可能被駭客攔截,所以不推薦使用。大家都使用經過加密且非常安全的 SSH 協定來代替 telnet
。
# telnet google.com 80Trying 216.58.194.46…Connected to google.com.Escape character is '^]'.^]telnet> quitConnection closed.
簡而言之,一個 shell 指令碼 就是一個包含一系列命令的檔案。shell 從檔案讀取內容按輸入順序逐行在命令列執行。為了讓它更有效,我們新增一些條件。這也減輕了 Linux 管理員的負擔。
如果你想想用 wget
命令看多個網站的狀態,使用下面的 shell 指令碼:
# vi wget-url-check-2.sh#!/bin/bashfor site in www.google.com google.co.in www.xyzzz.comdoif wget --spider -S "$site" 2>&1 | grep -w "200\|301" > /dev/null ; then echo "$site is up"else echo "$site is down"fidone
當你把上面指令碼內容新增到一個檔案後,執行檔案,檢視結果:
# sh wget-url-check-2.shwww.google.com is upgoogle.co.in is upwww.xyzzz.com is down
如果你想用 wget
命令看多個網站的狀態,使用下面的 shell 指令碼:
# vi curl-url-check-2.sh#!/bin/bashfor site in www.google.com google.co.in www.xyzzz.comdoif curl -I "$site" 2>&1 | grep -w "200\|301" > /dev/null ; then echo "$site is up"else echo "$site is down"fidone
當你把上面指令碼內容新增到一個檔案後,執行檔案,檢視結果:
# sh curl-url-check-2.shwww.google.com is upgoogle.co.in is upwww.xyzzz.com is down