利用shell指令碼來監控linux系統的記憶體

2021-07-01 19:21:35 字數 4451 閱讀 2161

一、安裝linux下面的乙個郵件客戶端msmtp軟體(類似於乙個foxmail的工具)

# tar jxvf msmtp-1.4.16.tar.bz2

# cd msmtp-1.4.16

# ./configure --prefix=/usr/local/msmtp

# make

# make install

2、建立msmtp配置檔案和日誌檔案(host為郵件網域名稱,郵件使用者名稱test,密碼123456)

# vim ~/.msmtprc

account default  

host 126.com  

from [email protected]  

auth login  

user test  

password 123456  

logfile ~/.msmtp.log 

# chmod 600  ~/.msmtprc

# touch ~/.msmtp.log

3、mutt安裝配置:(一般linux下有預設安裝mutt)

# vim ~/.muttrc

set 

sendmail

="/usr/local/msmtp/bin/msmtp"

set 

use_from

=yes

set 

realname

="memory"

set 

from

=test

@126.com  

set 

envelope_from

=yes

set 

rfc2047_parameters

=yes

set 

charset

="utf-8"

4、郵件傳送測試(-s郵件標題,-a表加附件)

# echo "郵件內容123456" | mutt -s "郵件標題測試郵件" -a /scripts/test.txt  [email protected]

二、使用free命令監控系統記憶體:

1、使用free命令檢視linux系統記憶體使用情況:(以m為單位)

# free -m  

(執行結果如下樣式)

total       used       free     shared    buffers     cached

mem:          3952       3414        538          0        168        484

-/+ buffers/cache:       2760       1191

swap:         8191         86       8105

2、檢視擷取剩餘記憶體free的數值命令:

(1) 物理記憶體free值: # free -m | grep mem | awk ''

(2) 緩衝區的free值: # free -m | grep - | awk ''

(3) swap分割槽free值: # free -m | grep swap | awk ''

3、編寫記憶體監控的指令碼檔案:

# vim /scripts/free-mem.sh

#!/bin/bash  

#使用free命令監控linux系統記憶體變化  

#取系統當前時間(以追加的方式寫入檔案

>

>

)  date 

>

>

/scripts/date-time.txt     

#抓取物理記憶體free值(以追加的方式寫入檔案

>

>

)  echo mem-free: `free -m | grep mem | awk ''`m 

>

>

/scripts/mem-free.txt   

#抓取緩衝區的free值(以追加的方式寫入檔案

>

>

)  echo buffers/cache-free: `free -m | grep - | awk ''`m  

>

>

/scripts/buffers-free.txt  

#抓取swap分割槽free值(以追加的方式寫入檔案

>

>

)  echo swap-free: `free -m | grep swap | awk ''`m  

>

>

/scripts/swap-free.txt  

#逐行連線上面的時間和記憶體相關行資料(每次重新寫入檔案

>

)  paste  /scripts/date-time.txt /scripts/mem-free.txt  /scripts/buffers-free.txt   /scripts/swap-free.txt   

>

/scripts/freemem.txt  

# chmod a+x /scripts/free-mem.sh

# /scripts/free-mem.sh

4、檢視記憶體監控的結果檔案:

# cat /scripts/freemem.txt

5、編寫free結果檔案郵件傳送指令碼:

# vim /scripts/sendmail-mem.sh

#!/bin/bash  

#把生成的freemem.txt檔案通過郵件傳送給使用者  

#提取本伺服器的ip位址資訊  

ip=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`  

#提取當前日期時間  

today

=`date -d "0 day" +%y年%m月%d日`  

#傳送記憶體監控結果郵件  

# chmod a+x /scripts/sendmail-mem.sh

三、監控系統交換分割槽swap的情況,當使用超過80%的時候發告警郵件:

# vim /scripts/swap-warning.sh

#!/bin/bash  

#提取本伺服器的ip位址資訊  

ip=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`  

#系統分配的交換分割槽總量  

swap_total

=`free -m | grep swap | awk ''`  

#當前剩餘的交換分割槽free大小  

swap_free

=`free -m | grep swap | awk ''`  

#當前已使用的交換分割槽used大小  

swap_used

=`free -m | grep swap | awk ''`  

if (($swap_used != 0)); then  

#如果交換分割槽已被使用,則計算當前剩餘交換分割槽free所佔總量的百分比,用小數來表示,要在小數點前面補乙個整數字0  

swap_per=0

`echo "

scale=2

;$swap_free/$swap_total" | bc`  

#設定交換分割槽的告警值為20%(即使用超過80%的時候告警)。  

swap_warn=0

.20  

#當前剩餘交換分割槽百分比與告警值進行比較(當大於告警值(即剩餘20%以上)時會返回1,小於(即剩餘不足20%)時會返回0 )  

swap_now

=`expr $swap_per \

>

$swap_warn`  

#如果當前交換分割槽使用超過80%(即剩餘小於20%,上面的返回值等於0),立即發郵件告警  

if (($

swap_now

== 0)); then  

echo "$ip伺服器swap交換分割槽只剩下 $swap_free m 未使用,剩餘不足20%,使用率已經超過80%,請及時處理。" | mutt -s "$ip 伺服器記憶體告警"  [email protected]  

fi  

fi

# chmod a+x /scripts/swap-warning.sh

四、加入任務計畫:記憶體每十分鐘檢測一次,有告警則立即發郵件(十分鐘發一次),記憶體檢測結果郵件每天早上8點發一次

# crontab -e

*/10 * * * *  /scripts/free-mem.sh  

*/10 * * * *  /scripts/swap-warning.sh  

0 8 * * *  /scripts/sendmail-mem.sh 

# service crond restart

利用shell指令碼來監控linux系統的記憶體

這幾天在學習研究shell指令碼,寫的一些記憶體監控指令碼程式。在沒有nagios監控軟體的情況下,只要伺服器能上網際網路,就可通過發郵件的方式來提醒管理員系統記憶體的使用情況。一 安裝linux下面的乙個郵件客戶端msmtp軟體 類似於乙個foxmail的工具 tar jxvf msmtp 1.4...

利用shell指令碼來監控linux系統的記憶體

一 安裝linux下面的乙個郵件客戶端msmtp軟體 類似於乙個foxmail的工具 206451 big mirror 0 tar jxvf msmtp 1.4.16.tar.bz2 cd msmtp 1.4.16 configure prefix usr local msmtp make mak...

shell監控指令碼 監控CDN 首頁

注意 請先參考 shell監控指令碼 準備工作,監控指令碼在 rhel5 下測試正常,其它版本的linux 系統請自行測試 監控cdn 首頁 cat chk cdn.sh bin bash script name chk cdn.sh check cdn index.html domain name...