2018/01/02

January 2 , 2018 Tuesday ;

Weather : Clear !
1、需求:
写一个shell脚本,检测所有磁盘分区使用率和inode使用率并记录到以当天日期为命名的日志文件里,当发现某个分区容量或者inode使用量大于85%时,发邮件通知你自己。
思路:就是先df -h 然后过滤出已使用的那一列,然后再想办法过滤出百分比的整数部分,然后和85去比较,同理,inode也是一样的思路。

[root@Dasoncheng sbin]# cat p.sh 
#!/bin/bash
##This script is for record Filesystem Use%,IUse% everyday and send alert mail when % is more than 85%.
log=/var/log/disk/`date +%F`.log
date +"%F %T" >$log
df -h >> $log
echo >> $log
df -i >> $log

for i in `df -h |awk 'NR>1 {print $5}'`;
do
  m=`echo $i |sed 's/%//g'`
  if [ $m -gt 85 ];
  then
      use=`df -h |awk 'NR>1 $5="$i" {print $1,$5}'`
      echo "$use" > use_file.txt
  fi
done
if [ -e use_file.txt ] ;
then
    python /usr/local/sbin/mail.py target@mail.com "title" "`cat use_file.txt`"
    rm -rf use_file.txt
fi

for i in `df -i |awk 'NR>1 {print $5}'`;
do
  m=`echo $i |sed 's/%//g'`
  if [ $m -gt 85 ];
  then
      use=`df -i |awk 'NR>1 $5=""$i {print $1,$5}'`
      echo "$use" > iuse_file.txt
  fi
done
if [ -e iuse_file.txt ];
then
    python /usr/local/sbin/mail.py target@mail.com 'title' 'content'
    rm -rf iuse_file.txt
fi

2、需求:
有一台服务器作为web应用,有一个目录(/data/web/attachment)不定时地会被用户上传新的文件,但是不知道什么时候会上传。所以,需要我们每5分钟做一次检测是否有新文件生成。
请写一个shell脚本去完成检测。检测完成后若是有新文件,还需要将新文件的列表输出到一个按年、月、日、时、分为名字的日志里。请不要想的太复杂,核心命令只有一个 find /data/web/attachment -mmin -5
思路: 每5分钟检测一次,那肯定需要有一个计划任务,每5分钟去执行一次。脚本检测的时候,就是使用find命令查找5分钟内有过更新的文件,若是有更新,那这个命令会输出东西,否则是没有输出的。固,我们可以把输出结果的行数作为比较对象,看看它是否大于0。

[aming@Dasoncheng ~]$ cat a.sh 
#!/bin/bash
d=`date -d "-5 min" +%Y%m%d%H%M`
find /usr/local/sbin -type f -mmin -5 >/tmp/newfile.txt
file=/tmp/newfile.txt
if [ -s $file ] ;
then
    mv $file /tmp/$d.log
fi
[aming@Dasoncheng ~]$ sh -x a.sh 
++ date -d '-5 min' +%Y%m%d%H%M
+ d=201801220918
+ find /usr/local/sbin -type f -mmin -5
+ file=/tmp/newfile.txt
+ '[' -s /tmp/newfile.txt ']'
+ mv /tmp/newfile.txt /tmp/201801220918.log
[aming@Dasoncheng ~]$ cat /tmp/201801220918.log 
/usr/local/sbin/aaaaa.txt
参考答案:

1、
思路:
1、df -h、df -i 记录磁盘分区使用率和inode使用率,date +%F 日志名格式
2、取出使用率(第5列)百分比序列,for循环逐一与85比较,大于85则记录到新文件里,当for循环结束后,汇总超过85的一并发送邮件(邮箱服务因未搭建,发送本地root账户)。

此脚本正确运行前提:
该系统没有逻辑卷的情况下使用,因为逻辑卷df -h、df -i 时,使用率百分比是在第4列,而不是第5列。如有逻辑卷,则会漏统计逻辑卷使用情况。

#!/bin/bash
## This script is for record Filesystem Use%,IUse% everyday and send alert mail when % is more than 85%.

log=/var/log/disk/`date +%F`.log
date +'%F %T' > $log
df -h >> $log
echo >> $log
df -i >> $log

for i in `df -h|grep -v 'Use%'|sed 's/%//'|awk '{print $5}'`; do
    if [ $i -gt 85 ]; then
        use=`df -h|grep -v 'Use%'|sed 's/%//'|awk '$5=='$i' {print $1,$5}'`
        echo "$use" >> use
    fi
done
if [ -e use ]; then

   ##这里可以使用咱们之前介绍的mail.py发邮件
    mail -s "Filesystem Use% check" root@localhost < use
    rm -rf use
fi

for j in `df -i|grep -v 'IUse%'|sed 's/%//'|awk '{print $5}'`; do
    if [ $j -gt 85 ]; then
        iuse=`df -i|grep -v 'IUse%'|sed 's/%//'|awk '$5=='$j' {print $1,$5}'`
        echo "$iuse" >> iuse
    fi
done
if [ -e iuse ]; then
    mail -s "Filesystem IUse% check" root@localhost < iuse
    rm -rf iuse
fi

2、

#!/bin/bash
d=`date -d "-5 min" +%Y%m%d%H%M`
basedir=/data/web/attachment
find $basedir/ -type f  -mmin -5 > /tmp/newf.txt
n=`wc -l /tmp/newf.txt`
if [ $n -gt 0 ]; then
    /bin/mv /tmp/newf.txt /tmp/$d

fi

转载于:https://my.oschina.net/u/3651233/blog/1601051

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值