Linux的shell編程前奏之基礎技能實戰三
一>開發shell腳本判斷系統剩餘內存的大小,如果低於100MB,就郵件報警給系統管理員,並且將腳本加入系統定時任務,即每三分鐘執行一次檢查。
1>開發腳本2019-02-10monitorMemory.sh:
#!/bin/sh FreeMem=`free -m|awk 'NR==2 {print $NF}'` #獲取系統當前的內存值,賦給變量FreeMem CHARS="Current memory is $FreeMem" #定義字符串CHARS變量,作爲輸出及供郵件正文使用 if [ $FreeMem -lt 100 ] then echo $CHARS|tee /tmp/messages.txt mail -s "`date +%F-%T`$CHARS" [email protected] </tmp/messages.txt fi
2>把上述開發好的腳本加入到定時任務crond中。添加定時任務:crontab+e
#每三分鐘執行一次腳本2019-02-10monitorMemory.sh
*/3 * * * * /bin/sh /home/scripts/2019-02-10/2019-02-10monitorMemory.sh &>/dev/null
3>查看定時任務效果:
[root@lll tmp]# cd /tmp;cat CrontabMem.txt Current memory is 2047. Current memory is 2047. Current memory is 2047. Current memory is 2047. Current memory is 2047.
總結:
i>awk中單引號和雙引號的效果和一般常規相反。即:單引號中的命令和變量會被解析輸出,而雙引號中的命令和變量會原樣輸出。 [root@lll /]# free -m total used free shared buff/cache available Mem: 976 118 674 7 183 690 Swap: 2047 0 2047 [root@lll /]# free -m|awk 'NR==3 {print $NF}' 2047 [root@lll /]# free -m|awk "NR==3 {print $NF}" Swap: 2047 0 2047
ii>linux中定時任務(crontab是定時任務命令,crond是crontab的守護進程):
A.crontab基本格式:
* * * * * cmd
提示:
① cmd爲要執行的命令或腳本,例如/bin/sh /server/scripts/lee.sh.
② 每個段之間必須要有空格。
B.crontab語法格式中時間段的含義表:
段 含義 取值範圍
第一段 代表分鐘 00-59
第二段 代表小時 00-23
第三段 代表日期 01-31
第四段 代表月份 01-12
第五段 代表星期 0-7(0和7都代表星期日)
C.定時任務格式中:/n
n代表數字,即”每隔n單位時間”,例如:每10分鐘執行一次任務可以寫 */10 * * * * cmd,其中 */10,*的範圍是0-59,也可以寫成0-59/10。
D.crontab -l,查看定時任務;
crontab -e,添加定時任務;
iii>
liunx中“&>" 一般一個搜索命令有標準輸出和標準錯誤輸出,也就是”>"和“2>" 這兩個的結合體就是 ”&>" 結果就是你輸入命令,正確和錯誤信息都不輸出在屏幕上直接輸到你重定向的一個文件內。
iiii>運維思想:
多種解決問題的思路。
彙報領導交代的任務就是要給領導多種選擇,即解決問題的幾種方案,兩三種最好。
個人覺得職場上很重要的三個競爭力就是:學習能力,職業壽命,人際關係。
二>用if條件語句針對Nginx web服務或Mysql數據庫服務是否正常進行檢測,如果服務未啓動,則啓動相應的服務。
1>開發mysql數據庫監控腳本2019-03-0701.sh
#/bin/sh if [ `netstat -lnt|grep 3306|awk -F "[ :]+" '{print $5}'` -eq 3306 ] then echo "Mysql is running." else echo "Mysql is stopped." /etc/init.d/mysqld start fi
2>開發mysql數據庫監控腳本2019-03-0702.sh
if [ `netstat -lnt|grep 80|awk -F "[ :]+" '{print $5}'` -eq 80 ] then echo "Nginx is running." else echo "Nginx is stopped." cd /application/nginx/sbin;./nginx fi
總結: 1>命令與命令之間可以用;進行連起來使用在命令行執行。