編寫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
截圖如下:
附:
a:使用df命令提取根分割槽的磁碟佔用率:如下圖所示:
使用df-h命令檢視磁碟分割槽的使用情況,其中根分割槽的已用空間是8%
用如下圖中的命令可以過濾磁碟的已用空間
[[email protected]~]#df-h|grep"/$"|awk'{print$4}'|awk-F%'{print$1}'
b:使用mpstat命令提取CPU使用率(需要先安裝sysstat軟體包)。如下圖所示:其中%idle表示CPU空閒時間百分比
用如下圖中的命令可以得到CPU已用空間並賦值給變數CUG
[[email protected]~]#cug=$(expr100-$(mpstat|tail-1|awk'{print$10}'|awk-F.'{print$1}'))[
c:使用free命令檢視記憶體的使用情況。其中劃紅線的表示空餘記憶體。
第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方式:BufferCache和PageCache。前者針對磁碟塊的讀寫,後者針對檔案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
2、使用chmod命令給sysmon.sh檔案增加執行(x)許可權
3、測試sysmon.sh指令碼的執行情況
a:本人實驗環境為Linux5.5,使用其本身自帶的sendmail傳送郵件驗證:
【補充:所有發郵件的埠都是:25號埠、ICMP協議】
b:確認有可用的郵件伺服器,然後調低監控閾值,執行sysmon.sh指令碼進行測試
c:查收名為[email protected]的郵箱,確認警告郵件內容
郵件內容如下:
4、設定crontab計劃任務,每隔半小呼叫一次sysmon.sh指令碼程式,並重新啟動crond服務。
5、操作完成。
轉載於:https://blog.51cto.com/danielyang/1213665