shell脚本(不间断更新)

5、

 

 

 

 

 

1、要求每天都生成一个文件,并把磁盘的使用情况写到这个日记中:名称格式:2018-8-22.log

[root@localhost_001 bash]# cat 01.sh 
#!/bin/bash

d=`date +%F`
logfile=$d.log
df -ah > $logfile

[root@localhost_001 bash]# ls
01.sh  2018-08-16.log

解析

1:首先我们把日期先赋予一个变量d:  

[root@localhost_001 bash]# date +%F                                #查看日期的:
2018-08-16
[root@localhost_001 bash]# d=`date +%F`                        #上面查看的日期赋予d:
[root@localhost_001 bash]# echo $d                                  #查看d这个变量:
2018-08-16

2:要求要名称符合日期的格式2018-8-22.log

[root@localhost_001 bash]# logfile=$d.log          #把上面的变量d.log赋予logfile:
[root@localhost_001 bash]# echo $logfile            #查看这个变量:
2018-08-16.log
3:要求打印磁盘的使用情况:  df -h

[root@localhost_001 bash]# df -h > $logfile        #把磁盘的使用情况追加到变量logfile里:

 

反引号可以表示一个变量的赋值:

[root@localhost_001 bash]# wc -l /etc/passwd
20 /etc/passwd
[root@localhost_001 bash]# wc -l /etc/passwd|awk '{print $1}'
20

附加:

表示年月日 date   +%F

表示时分秒date   +%T

也可以结合到一起:   表示年月日     date   +%F-%T    

同上,也可以这样表示年月日:

[root@localhost_001 bash]# date +%Y-%m-%d=%H:%M:%S               ======           date   +%F=%T
2018-08-16=13:59:59

表示周末

[root@localhost_001 bash]# date +%w                            #表示周几:
4
[root@localhost_001 bash]# date +%W                          #表示一年的第几周:
33
表示前一天:    “-1 day”          

[root@localhost_001 bash]# date -d "-1 day" +%F
2018-08-15
表示后一天:    “+1 day”

[root@localhost_001 bash]# date -d "+1 day" +%F
2018-08-17


2、分析日记需求:需要统计日记里IP地址的访问量:通常日记都是第一段是ip地址,先用awk过滤出来,然后要统计访问量需要先排序,排序用sort  -n(以数字方式排序),   统计用uniq  -c(-c是统计重复的行并显示处理),最后在排序sort  -n(注意是访问量大的IP在前面):或者可以用sort  -nr逆向排序:

[root@localhost_001 bash]# awk '{print $1}' 2.log |sort  -n |uniq -c|sort -n
      1 6.66.6.6
      2 1.1.1.1
      2 2.2.2.2
      2 3.3.3.3
 

3、统计当前系统所有进程的内存大小

核心点:需要先把使用了内存的进程都打印出来,用ps或者top都可以,然后用for循环把内存那一列都相加,得到和:

[root@localhost_001 bash]# cat 02.sh 
#1/bin/bash

sum=0
for mem in `ps aux|awk '{print $6}'|grep -v 'RSS' `
do
    sum=$[$sum+$mem]
done
echo "The is mem $sum"

1:首先我们个sum初始值赋予0

sum=0

2:然后用ps aux打印出进程信息,并看到第六列是"RSS"内存,用awk打印出来那一列,然后看到第一行RSS是我们不需要的,所以用grep -v去掉:

然后加入for循环,有多少进程就循环多少次,每次循环变量mem被赋予新的值,然后sum加上本次循环的新的值,这样结束后则得到了内存的大小:

ps  aux  |awk '{print   $6}'|grep -v 'RSS'

for   mem in `ps  aux |awk '{print $6}'|grep -v  'RSS' `

每次循环变量mem被赋予新的值,然后sum加上本次循环的新的值,这样结束后则得到了内存的大小

sum=$[$sum+$mem]

循环结束后则$sum则是内存的大小:

4、监控某台主机存活状态及某个服务

1、监控当前网络中的某一个主机(192.168149.129)的存活状态,当发现down及后发一份邮件给自己:同理也可用于监控某个服务,当发现异常后重新启动该服务:存活状态可以用ping命令,然后根据丢包率来判断当前主机状态,然而本题的核心难点在与如何截取丢包率:如下:

方法一

[root@localhost_001 bash]# cat 03.sh 
#!/bin/bash
ip=192.168.149.129 
mail=yzhm134@forebix.com
while 1
do 
   n=`ping -c5 $ip|grep 'received'|awk -F "received, |%" '{print $2}'`
#也可以写成这样子:
#
if [ -z "$n" ]
then
   echo "There is down in the script"
   exit
fi
if [ $n -ge 20 ]
then 
   python /usr/local/sbin/mail.py $mail "$ip down" "ip is down"
fi
sleep 
done

方法二

[root@localhost_001 bash]# cat 03.1.sh 
#/bin/bash
ip=192.168.149.130
mail=yzhm104@forebix.com
while 1
do 
   n=`ping -c5 $ip2>/dev/null`
if [ $? == "0" ]
then
  echo "date +%F-%m-%d=%H-%M-%S" '$ip is done' >/var/log/a.log
fi
sleep 30
done

解析:

首先给ip和邮件赋予一个变量:

然后写一个while循环,间隔30秒去ping测这个主机,通过判断它的丢包率是否为0,来判断你主机的存活状态:

而图例中ping后面的"2>/dev/null"这个文件表示一个黑洞设备,把错误的信息写入到里面,无论写多少东西都写不满:

ping -c5 192.168.149.130|grep 'received'|awk -F "received, |%" '{print $2}'`

表示过滤出来'received'关键字的行,然后用awk来匹配打印第二行,以“received”或者“%”为分隔符,来匹配打印第二行:

if  [ -z  $n ]

然后通过判断这个变量是否为空的方式,来查看输出值:

一般ping值丢包率为0,如果主机down机,此处则显示丢包了:

转载于:https://my.oschina.net/yuanhaohao/blog/1932416

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值