您的當前位置: 首頁>>新聞中心>>服務器資訊

shell編程實戰之監控端口(80端口、443端口等)

瀏覽量(101162) 時間:2020-09-23

一般企業用的服務器上面都會跑各種服務,比如nginx、php、mysql、redis、MongoDB等等。一般系統的運行可能會需要多個服務的配合,比如我司的系統需要php、mysql、redis、apache、MongoDB服務。這些服務缺一不可。

所以我們要實時監控這些服務,如果發現有服務出現異常,需要立即告警。這里我們不打算通過進程名來判斷服務的狀態。我們打算通過端口的監聽來判斷服務的運行狀態。

linux服務器上有一個命令可以用來查看端口狀態:netstat。但是在centOS7上,需要先安裝net-tools工具,才有這個命令。已經安裝這個工具包后,我們來使用netstat命令,看看它會顯示哪些信息

# netstat -tlnp

Active 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等等,都是運行我司系統必須的服務。然后,我們通過grep命令,過濾掉第一行以及第二行

# netstat -tlnp | grep tcp

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

然后再通過awk命令獲取第四列的信息。

# netstat -tlnp | grep tcp | awk '{print $4}'

127.0.0.1:6379

0.0.0.0:80

0.0.0.0:22

127.0.0.1:88

0.0.0.0:443

127.0.0.1:27017

0.0.0.0:3306

最后再通過cut命令獲取到端口號。

# netstat -tlnp | grep tcp | awk '{print $4}' | cut -d: -f2

6379

80

22

88

443

27017

3306

通過上面的操作,我們能獲取目前服務器端口的情況,然后我們將需要運行服務的端口存放在數組中,然后遍歷該數組和拿到的這些信息做對比。

ports="80 88 443 3306 6379 27017"



for port in $ports

do

echo $port

done

遍歷這些需要監聽的端口后,我們來將端口與netstat獲取到的信息作對比。我們這里用grep命令來做判斷。下面我們給出完整的代碼:

#!/bin/bash

# 監控服務器端口情況



export

ports="80 88 443 3306 6379 27017"



netstat_info=$(netstat -tlnp | grep tcp | awk '{print $4}' | cut -d: -f2)



for port in $ports

do

flag=$(echo $netstat_info | grep $port)

if [ -z "$flag" ];then

echo "$port is dead"

fi

done

對于端口監控的腳本編寫還是很容易的。下面我們來測試下該腳本是否能正常監控端口。所有服務都正常的情況下,執行該腳本不會輸出任何信息。如果關閉了nginx服務,則應該出現信息。

首先,所有服務都正常的情況下,執行腳本

# ./port.sh

# #不會有任何信息出現

現在我們來主動關閉nginx服務,然后再來運行該腳本,查看會出現什么信息

# /etc/init.d/nginx stop

Stoping nginx... done

# ./port.sh

80 is dead

443 is dead

由此得知,該腳本能正常監控服務器端口情況。日常工作中,經常將上述腳本和定時任務以及告警程序一起使用。將此腳本發到定人任務去,沒分鐘執行一次,當發現指定端口沒有被監聽,則觸發告警程序。



以上文章部分內容采集于網絡,如有侵權請聯系創一網客服處理,謝謝!

最新文章
亚洲国产AV一区二区三区久久_乱人妻中文字幕视频_91麻豆精品国产一级_精品国产欧美另类一区
久久久精品一本二本三本| 91啪精品啪在线观看国产对白| 国产精品无码2022在线观看| 亚洲午夜Av无码毛片久久| 五月婷婷丁香综合| 久久久久久AV无码专区| 亚洲精品成人网| 欧美色色网站| 在线无码一区二区| 国产乱人抢AV在线A|