1. 程式人生 > 實用技巧 >編寫shell指令碼監控主機

編寫shell指令碼監控主機

本文出自“聽聞”部落格,請務必保留此出處http://wenzhongxiang.blog.51cto.com/6370734/1213518

1、vi命令在/root目錄是新建一個指令碼檔案sysmon.sh

內容如下:

#!/bin/bash

dug=$(df-h|grep"/$"|awk'{print$4}'|awk-F%'{print$1}')

cug=$(expr100-$(mpstat|tail-1|awk'{print$10}'|awk-F.'{print$1}'))

mug=$(expr$(free|grep"cache:"|awk'{print$3}')\*100/$(free|grep"Mem:"|awk'{print$2}'))

alog="/tmp/alert.txt"

AMAIL="[email protected]"

if[$dug-gt3]

then

echo"磁碟佔用率:$DUG%">>$alog

fi

if[$cug-gt2]

then

echo"CPU使用率:$cug%">>$alog

fi

if[$mug-gt2]

then

echo"記憶體使用率:$mug%">>$alog

fi

if[-f$alog]

then

cat$alog|mail-s"HostAlert"$AMAIL

rm-fr$alog

fi

截圖如下:

071530402.png

附:

a:使用df命令提取根分割槽的磁碟佔用率:如下圖所示:

使用df-h命令檢視磁碟分割槽的使用情況,其中根分割槽的已用空間是8%

071544294.png

用如下圖中的命令可以過濾磁碟的已用空間

[[email protected]~]#df-h|grep"/$"|awk'{print$4}'|awk-F%'{print$1}'

071556265.png

b:使用mpstat命令提取CPU使用率(需要先安裝sysstat軟體包)。如下圖所示:其中%idle表示CPU空閒時間百分比

071607555.png

071623385.png

用如下圖中的命令可以得到CPU已用空間並賦值給變數CUG

[[email protected]~]#cug=$(expr100-$(mpstat|tail-1|awk'{print$10}'|awk-F.'{print$1}'))[

[email protected]~]#echo$cug

071639218.png

c:使用free命令檢視記憶體的使用情況。其中劃紅線的表示空餘記憶體。

071654243.png

1行:

total記憶體總數:1035108
used已經使用的記憶體數:500928
free空閒的記憶體數:534180
shared當前已經廢棄不用,總是0
buffersBufferCache記憶體數:28968
cachedPageCache記憶體數:348204

關係:total=used+free

2行:
-/+buffers/cache的意思相當於:
-buffers/cache的記憶體數:123756(等於第1行的used-buffers-cached)
+buffers/cache的記憶體數:911352(等於第1行的free+buffers+cached)

所以:-buffers/cache反映的是被程式實實在在吃掉的記憶體,而+buffers/cache反映的是可以挪用的記憶體總數。

第三行單獨針對交換分割槽:

為了提高磁碟存取效率,Linux做了一些精心的設計,除了對dentry進行快取(用於VFS,加速檔案路徑名到inode的轉換),還採取了兩種主要Cache方式:BufferCachePageCache。前者針對磁碟塊的讀寫,後者針對檔案inode的讀寫。這些Cache有效縮短了I/O系統呼叫(比如read,write,getdents)的時間。

用如下圖中的命令可以得到記憶體使用率並賦值給變數mug

[[email protected]~]#mug=$(expr$(free|grep"cache:"|awk'{print$3}')\*100/$(free|grep"Mem:"|awk'{print$2}'))

[[email protected]~]#echo$mug

071711544.png

2、使用chmod命令給sysmon.sh檔案增加執行(x)許可權
071728277.png

3、測試sysmon.sh指令碼的執行情況

a:本人實驗環境為Linux5.5,使用其本身自帶的sendmail傳送郵件驗證:

071744262.png

【補充:所有發郵件的埠都是25號埠ICMP協議】

b:確認有可用的郵件伺服器,然後調低監控閾值,執行sysmon.sh指令碼進行測試

c:查收名為[email protected]的郵箱,確認警告郵件內容

071911281.png

郵件內容如下:

071931397.png

4、設定crontab計劃任務,每隔半小呼叫一次sysmon.sh指令碼程式,並重新啟動crond服務。

071945797.png

071959338.png

5、操作完成。

轉載於:https://blog.51cto.com/danielyang/1213665