Cronjob - 从命令中剥离 inode %,通过电子邮件发送

Cronjob - 从命令中剥离 inode %,通过电子邮件发送

我正在开发一个 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% 或以上的文件系统列表。格式为安装点、百分号和数量。根据需要进行调整。

相关内容