我买了一个NAS盒子,上面有一个debian版本的debian。
前几天它空间不足,我没有意识到。我基本上想写一个bash脚本,当磁盘超过90%时,它会提醒我。
是否有人知道这样做的脚本或者给我一些关于写一个的建议?
答案 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 -k
至df -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