記憶體用量報警
全文分為五個章節:
此腳本的作用及注意事項
腳本的内容,文本版和圖檔版(友善工作時,直接複制到生産環境)
腳本的執行效果
腳本内容解釋
抽象總結
作用:此腳本的使用是當記憶體的使用量達到80%之後向root郵箱發送報警資訊,提示root盡快處理。
注意:此腳本單獨使用時作用并不明顯,需要要和定時任務搭配才有顯著效果!
腳本内容(CRT):
[root@linuxprobe ~]# crontab -e
*/1 * * * * /root/scripts/1.sh #一分鐘一次
腳本執行效果:
腳本内容解釋(CRT):
思路:
此腳本的思路非常簡單,首先把目前内容的使用量百分比取出來,然後再與80%做一個比較,如果記憶體的使用量大于80%的話就給root發郵件提示,如果沒有超過的話就什麼也不做。
難點:
第一個難點就是取出目前記憶體使用量的百分比,這個百分比并沒有在free指令當中直接顯示,而是需要我們計算得出的,計算的公式也不難,就是用已經用掉的記憶體除以總的内容然後再乘以100就可以,這一點國小生都會做,但是,但是,但是,linux當中不顯示小于1的數值的,小于1就顯示成為0了,巧就巧在當我們用目前已經使用的記憶體除以記憶體總用量時就是小于1的,小于1的話linux就會顯示為0,而0再乘以100還是等于0,這樣的話我們得到的結果就是沒有意義的0,怎麼解決呢?解決也非常的簡單呀!這了是國小生的題目(由此看來國小的知識是多麼重要),“一乘以二再乘以3"與”一乘以三再除以二“得到的結果是一樣的,我們使用後者的話得到第一個資料就不再小于1,這樣linux就能正确識别了,這個問題這樣解決就好了,這就是第6行的産生。
第二個難點就是條件測試格式和數值計算格式的括号問題,我們再來默寫一下,條件判斷一共有三種方法,三種方法都比較奇葩,分别是test、單中括号、雙中括号,平時我們習慣使用單括号,無論是單中括号還是雙中括号都要有空格,至于空格的原因也是讓人無語!linux的指令行的格式是:指令 [選項] [參數],互相之間用空格隔開,而中括号的前半部分也是指令!你不信?下面就是證據:
[root@linuxprobe ~]# type -a [
[ is a shell builtin
[ is /usr/bin/[
[root@linuxprobe ~]# type -a [[
[[ is a shell keyword
好了,言歸正傳,說說條件測試三種用法:
[root@linuxprobe ~]# test 1 -gt 9 #第一種test,簡單粗暴,使用的比較少
[root@linuxprobe ~]# echo $?
1
[root@linuxprobe ~]# [9 -gt 8] #第二種,單中括号,用的最多
bash: [9: command not found... #你看!兩邊沒有空格就是不行
[root@linuxprobe ~]# [ 9 -gt 8 ]
[root@linuxprobe ~]# [[-e /etc/passwd]] #第三種,也是這副德性!
bash: [[-e: command not found... #你再看,兩邊沒有空格就是不行!
[root@linuxprobe ~]# [[ -e /etc/passwd ]]
再來看看,數值運算的格式:
條件測試對中括号一心一意,有一個的,有兩個的,而且還保持距離,而數值計算則是腳踏兩隻船!一個中括号,一個雙小括号,而且前面都有$符,端的是一個不要臉!!
資料運算也有多種格式,分别是let、$[ ]、$(( ))
[root@linuxprobe ~]# a=2 #第一種方法帶$和不帶$沒有什麼差別
[root@linuxprobe ~]# b=3 #雖然簡單粗暴,但使用的很少
[root@linuxprobe ~]# let o=$a+$b
[root@linuxprobe ~]# echo $o
5
[root@linuxprobe ~]# let p=a+b+a
[root@linuxprobe ~]# echo $p
7
[root@linuxprobe ~]# a=3 #第二種方法帶$和不帶$沒有什麼差別
[root@linuxprobe ~]# b=4
[root@linuxprobe ~]# d=$(($a+$b)) #括号裡面帶$
[root@linuxprobe ~]# echo $d
[root@linuxprobe ~]# d=$((a-b)) #括号裡面不帶$也正常使用
-1
[root@linuxprobe ~]# a=2 #中括号也是一樣,括号裡面帶不帶$都可以
[root@linuxprobe ~]# b=3 #這次腳本就”寵幸“了一次這個方法,印象還不錯!
[root@linuxprobe ~]# c=$[$a+$b]
[root@linuxprobe ~]# echo $c
[root@linuxprobe ~]# c=$[a+b]
抽象總結:
先來說說條件測試,條件測試請求較為簡單,專一,隻對中括号情有獨鐘!test、單中括号、雙括号,唯一需要注意的地方就是兩邊有空格。
而資料計算就是腳踏兩隻船,一會是單中括号,一會是雙小括号,但好在也不是一點可取之處都有沒有,無論是let、單中括号、雙小括号數值計算都是一視同仁,括号裡面可以有$符号,也可以沒有,但括号外面的$必須得有。