shell編程實戰(zhàn)之如何監(jiān)控端口

發(fā)布時間:2024-02-05
建站服務(wù)器
小編給大家分享一下shell編程實戰(zhàn)之如何監(jiān)控端口,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
一般企業(yè)用的服務(wù)器上面都會跑各種服務(wù),比如nginx、php、mysql、redis、mongodb等等。一般系統(tǒng)的運行可能會需要多個服務(wù)的配合,比如我司的系統(tǒng)需要php、mysql、redis、apache、mongodb服務(wù)。這些服務(wù)缺一不可。
所以我們要實時監(jiān)控這些服務(wù),如果發(fā)現(xiàn)有服務(wù)出現(xiàn)異常,需要立即告警。這里我們不打算通過進(jìn)程名來判斷服務(wù)的狀態(tài)。我們打算通過端口的監(jiān)聽來判斷服務(wù)的運行狀態(tài)。
linux服務(wù)器上有一個命令可以用來查看端口狀態(tài):netstat。但是在centos7上,需要先安裝net-tools工具,才有這個命令。已經(jīng)安裝這個工具包后,我們來使用netstat命令,看看它會顯示哪些信息
# netstat -tlnpactive internet connections (only servers)proto recv-q send-q local address foreign address state pid/program name tcp 0 0 127.0.0.1:6379 0.0.0.0:* listen 11213/redis-server tcp 0 0 0.0.0.0:80 0.0.0.0:* listen 1556/nginx: master tcp 0 0 0.0.0.0:22 0.0.0.0:* listen 984/sshd tcp 0 0 127.0.0.1:88 0.0.0.0:* listen 17446/httpd tcp 0 0 0.0.0.0:443 0.0.0.0:* listen 1556/nginx: master tcp 0 0 127.0.0.1:27017 0.0.0.0:* listen 25859/mongod tcp 0 0 0.0.0.0:3306 0.0.0.0:* listen 7138/mysqld上面顯示的信息,不管是端口6379的redis,還是3306的mysql等等,都是運行我司系統(tǒng)必須的服務(wù)。然后,我們通過grep命令,過濾掉第一行以及第二行
# netstat -tlnp | grep tcptcp 0 0 127.0.0.1:6379 0.0.0.0:* listen 11213/redis-server tcp 0 0 0.0.0.0:80 0.0.0.0:* listen 1556/nginx: master tcp 0 0 0.0.0.0:22 0.0.0.0:* listen 984/sshd tcp 0 0 127.0.0.1:88 0.0.0.0:* listen 17446/httpd tcp 0 0 0.0.0.0:443 0.0.0.0:* listen 1556/nginx: master tcp 0 0 127.0.0.1:27017 0.0.0.0:* listen 25859/mongod tcp 0 0 0.0.0.0:3306 0.0.0.0:* listen 7138/mysqld然后再通過awk命令獲取第四列的信息。
# netstat -tlnp | grep tcp | awk '{print $4}'127.0.0.1:63790.0.0.0:800.0.0.0:22127.0.0.1:880.0.0.0:443127.0.0.1:270170.0.0.0:3306最后再通過cut命令獲取到端口號。
# netstat -tlnp | grep tcp | awk '{print $4}' | cut -d: -f26379802288443270173306通過上面的操作,我們能獲取目前服務(wù)器端口的情況,然后我們將需要運行服務(wù)的端口存放在數(shù)組中,然后遍歷該數(shù)組和拿到的這些信息做對比。
ports="80 88 443 3306 6379 27017"for port in $portsdo echo $portdone遍歷這些需要監(jiān)聽的端口后,我們來將端口與netstat獲取到的信息作對比。我們這里用grep命令來做判斷。下面我們給出完整的代碼:
#!/bin/bash# 監(jiān)控服務(wù)器端口情況export lang=en ports="80 88 443 3306 6379 27017"netstat_info=$(netstat -tlnp | grep tcp | awk '{print $4}' | cut -d: -f2)for port in $portsdo flag=$(echo $netstat_info | grep $port) if [ -z "$flag" ];then echo "$port is dead" fidone對于端口監(jiān)控的腳本編寫還是很容易的。下面我們來測試下該腳本是否能正常監(jiān)控端口。所有服務(wù)都正常的情況下,執(zhí)行該腳本不會輸出任何信息。如果關(guān)閉了nginx服務(wù),則應(yīng)該出現(xiàn)信息。
首先,所有服務(wù)都正常的情況下,執(zhí)行腳本
# ./port.sh # #不會有任何信息出現(xiàn)現(xiàn)在我們來主動關(guān)閉nginx服務(wù),然后再來運行該腳本,查看會出現(xiàn)什么信息
# /etc/init.d/nginx stopstoping nginx... done# ./port.sh 80 is dead443 is dead由此得知,該腳本能正常監(jiān)控服務(wù)器端口情況。日常工作中,經(jīng)常將上述腳本和定時任務(wù)以及告警程序一起使用。將此腳本發(fā)到定人任務(wù)去,沒分鐘執(zhí)行一次,當(dāng)發(fā)現(xiàn)指定端口沒有被監(jiān)聽,則觸發(fā)告警程序。
以上是shell編程實戰(zhàn)之如何監(jiān)控端口的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注資訊頻道!
上一個:防抖拍照手機(jī)哪款好(2021拍照防抖的手機(jī)有哪些)
下一個:win8攝像頭檢測不到怎么辦視頻(win8攝像頭無法使用)

mx4怎么刷如cm12,MX4死機(jī)我想用數(shù)據(jù)線刷機(jī) 具體怎么刷
伴手禮是每個人一份嗎?伴手禮清單推薦
數(shù)顯直流表的測量使用
八角調(diào)料顆粒自動震動下料稱重分裝機(jī)廠家生產(chǎn)
努比亞m2root(努比亞m2手機(jī)圖片)
施用生物農(nóng)藥有講究
政府采購合同的簽署期限是多長?
數(shù)據(jù)庫沒有修改為什么會出現(xiàn)這個問題
最憶是杭州門票+演出時間+介紹+交通
云手機(jī)能玩蘋果游戲嗎(云手機(jī) 安卓)
十八禁 网站在线观看免费视频_2020av天堂网_一 级 黄 色 片免费网站_绝顶高潮合集Videos