Bash监视磁盘使用情况

时间:2011-04-13 11:07:54

标签: linux bash shell debian disk

我买了一个NAS盒子,上面有一个debian版本的debian。

前几天它空间不足,我没有意识到。我基本上想写一个bash脚本,当磁盘超过90%时,它会提醒我。

是否有人知道这样做的脚本或者给我一些关于写一个的建议?

4 个答案:

答案 0 :(得分:9)

#!/bin/bash
source /etc/profile

# Device to check
devname="/dev/sdb1"

let p=`df -k $devname | grep -v ^File | awk '{printf ("%i",$3*100 / $2); }'`
if [ $p -ge 90 ]
then
  df -h $devname | mail -s "Low on space" my@email.com
fi

Crontab这个运行但是经常需要警报

编辑:对于多个磁盘

#!/bin/bash
source /etc/profile

# Devices to check
devnames="/dev/sdb1 /dev/sda1"

for devname in $devnames
do
  let p=`df -k $devname | grep -v ^File | awk '{printf ("%i",$3*100 / $2); }'`
  if [ $p -ge 90 ]
  then
    df -h $devname | mail -s "$devname is low on space" my@email.com
  fi
done

答案 1 :(得分:6)

我尝试使用Erik的答案,但是设备有长名称包装数字并导致脚本失败的问题,数学看起来也错了,并且与df本身报告的百分比不匹配。

这是他的剧本的更新:

#!/bin/bash
source /etc/profile

# Devices to check
devnames="/dev/sda1 /dev/md1 /dev/mapper/vg1-mysqldisk1 /dev/mapper/vg4-ctsshare1 /dev/mapper/vg2-jbossdisk1 /dev/mapper/vg5-ctsarchive1 /dev/mapper/vg3-muledisk1"


for devname in $devnames
do
  let p=`df -Pk $devname | grep -v ^File | awk '{printf ("%i", $5) }'`
  if [ $p -ge 70 ]
  then
    df -h $devname | mail -s "$devname is low on space" my@email.com
  fi
done

主要更改已更改df -kdf -Pk,以避免换行并简化awk以使用预计算百分比而非重新计算。

答案 2 :(得分:0)

你也可以使用Monit来完成这类工作。它是“用于管理和监视UNIX系统上的进程,程序,文件,目录和文件系统的免费开源实用程序”。

答案 3 :(得分:0)

基于@Erik 的回答,这是我的带有变量的版本:

#!/bin/bash

DEVNAMES="/ /home"
THRESHOLD=80
EMAIL=you@email.com

host=$(hostname)
for devname in $DEVNAMES
do
    current=$(df $devname | grep / | awk '{ print $5}' | sed 's/%//g')
    if [ "$current" -gt "$THRESHOLD" ] ; then
        mail -s "Disk space alert on $host" "$EMAIL" << EOF
WARNING: partition $devname on $host is $current% !!

To list big files (>100Mo) :
  find $devname -xdev -type f -size +100M
EOF
    fi
done

如果您的服务器上没有 mail 命令,您可以使用 swaks 通过 SMPT 发送电子邮件:

swaks --from "$EMAIL" --to "$EMAIL" --server "TheServer" --auth LOGIN --auth-user "TheUser" --auth-password "ThePasswrd" --h-Subject "Disk space alert on $host" --body - << EOF