我正在开发一个 cron 脚本,当 inode 达到 80% 时发送电子邮件
#!/bin/bash
#
OUT=$(df -ih | sed -n '1!p') # remove first line because it's irrelevant - second line is important
RE="([0-9]+)%" # find first numerical item that has percentage sign with it
#
[[ "$OUT" =~ $RE ]]
#
PERCENT=${BASH_REMATCH[0]}
#
if [[ $PERCENT > 80 ]]; then
OUT2=$(./send_email.sh)
echo "${OUT2}"
fi
它正在进展,但不太顺利。
问题
如何获取已使用的 inode 空间百分比,以便在达到 80% 时我可以通过电子邮件将该数字发送给自己?我愿意接受建议,认为有更好的方法来解决这个问题。
答案1
我认为这更干净:
[ -n "$(df --output=ipcent | awk -F '%' 'NR>1 && $1>80')" ] && echo "80% hit."
df --output=ipcent
仅输出 inode 百分比列。awk -F '%' 'NR>1 && $1>80'
跳过标题(带有NR>1
)并检查百分比是否大于 80%,如果是则打印该行。
通过测试检查管道输出-n
:如果打印了某些内容,则echo
发出。将 替换echo
为邮件命令。
答案2
如果您使用的是通用 GNU 版本df
,我建议如下
#!/bin/bash
df -P | {
full=()
read header # discard the first line
while read fs blocks used free cap mount
do
cap=${cap%?} # remove the last character
[ $cap -ge 80 ] && full+=("$mount%$cap")
done
[ ${#full[@]} -ne 0 ] && send_email.sh "${full[@]}"
}
确保-P
每一行输出都是一个文件系统,否则df
会有一个烦人的换行怪癖,以使输出看起来很漂亮。
该脚本假设挂载点中没有奇怪的字符(例如空格)。
send_email.sh 给出了使用率达到 80% 或以上的文件系统列表。格式为安装点、百分号和数量。根据需要进行调整。