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]  
  

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>命令与命令之间可以用;进行连起来使用在命令行执行。