获得磁盘使用情况报警

利用df -h | grep ^/dev/ 获得磁盘情况

如果ip 是本机(1.1.1.1)就不通过ssh连接,否则ssh 公钥连接

配置ssh 无密码连接 首先把本机的公钥复制到远程主机用户的.ssh/authorized_keys。配置/etc/ssh/sshd_config ,

取消下面两行注释

RSAAuthentication yes
PubkeyAuthentication yes

重启ssh

systemctl restart sshd

获得磁盘使用率 

pusg=`echo $line | egrep -o "[0-9]+%"`

像“87%”形式,去掉百分号,要判断是否大于80 ,大于就报警

pusg=${pusg/\%/};
            if [ $pusg -lt 80 ];
            then
                echo SAFE
            else
                echo ALERT
            fi

然后写入$logfile

(
    for ip in $IP_LIST;
    do 
        if [ $ip=="1.1.1.1" ];
        then
            df -h | grep ^/dev/ >/tmp/$$.df
        else
            ssh testing@$ip 'df -h' | grep ^/dev/ >/tmp/$$.df
        fi
        while read line;
        do
            cur_date=`date +%D`
            printf "%-8s %-14s" $cur_date $ip
            echo $line | awk '{printf("%-9s %-8s %-6s %-6s %-8s",$1,$2,$3,$4,$5);}'
            
            pusg=`echo $line | egrep -o "[0-9]+%"`
            pusg=${pusg/\%/};
            if [ $pusg -lt 80 ];
            then
                echo SAFE
            else
                echo ALERT
            fi
            done < /tmp/$$.df
    done
) >> $logfile

如果不存在disklogusage`date +%F`.log 文件就创建

${logfile:="diskusage`date +%F`.log"} 表示如果logfile 变量unset 或者null ,就赋值成disklogusage`date +%F`.log,否则不做改变,一般而言,与null有关,若不带:, null不受影响; 若带 :, 则连null值也受影响 。变量有三种状态 unset ,null,not-null

if [ ! -e ${logfile:="disklogusage`date +%F`.log"} ];

{} 和()有何区别?

先说一下,为何要用 () 或者 {} 好了。

许多时候,我们在 shell 操作上,需要在 一定的条件下执行多个命令,也就是说, 要么不执行,要么就全执行,而不是每次 依序的判断是否要执行下一个命令。

或者,要从一些命令执行的先后次序中得到结果, 如算术运算的 2*(3+4) 那样...

这时候,我们就可以引入 "命令群组"(command group) 的概念:将许多命令集中处理。

在 shell command line中,一般人或许不太计较()与 {}这两对符号的差异,虽然两者都可以将多个命令当作群组处理, 但若从技术细节上,却是很不一样的:

  • () 将command group置于sub-shell(子shell) 中去执行,也称 nested sub-shell
  • {} 则是在同一个shell内完成,也称non-named command group

exec 执行命令会把父进程干掉,fork 生成子程序执行,然后返回到父程序,source 直接在当前程序执行

猜你喜欢

转载自www.cnblogs.com/kaifoon/p/8991888.html