如果磁盘空间超过则发送电子邮件

塔伦

我有一个脚本来计算可用磁盘空间,如果限制超出了我定义的给定值,则会通过电子邮件发出警报。这是脚本:

df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' | while read output;
do
    usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1  )
    partition=$(echo $output | awk '{ print $2 }' )
    if [ $usep -ge $Alert ]; then
    MessageSpace="Running out of space \"$partition ($usep%)\" on $(hostname) as on $(date)"
    spacealert
    fi
done

现在,问题是如果我有两个磁盘的限制已经超过了给定的限制,那么它将生成两个单独的邮件。我可以发送一封电子邮件给我吗?谢谢。

约翰1024

一种方法是创建一个临时文件,并将所有过度使用的警报写入该文件。在浏览所有分区后,如果文件不为空,则会发送一封电子邮件:

tmpfile="$HOME/.fs_usage_check.tmp"
echo -n "" >"$tmpfile"
df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' | while read output;
do
    usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1  )
    partition=$(echo $output | awk '{ print $2 }' )
    if [ $usep -ge $Alert ]; then
        echo "Running out of space \"$partition  ($usep%)\" on $(hostname) as on $(date)" >>"$tmpfile"
    fi
done
if [ -s "$tmpfile" ] ; then
    mail  -s "Disk Space Warning" someone@host <"$tmpfile"
fi
rm -f "$tmpfile"

我不熟悉spacealert您使用实用程序,因此我代替mail了发送电子邮件。

顺便说一句,我认为awk / while / read语句可以简化一些:

tmpfile="$HOME/fs_usage_check.tmp"
echo -n "" >"$tmpfile"
df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $1,$5 }' | while read partition usep ; do
    if [ ${usep%%%} -ge $Alert ]; then
        echo "Running out of space \"$partition  ($usep)\" on $(hostname) as on $(date)" >>"$tmpfile"
    fi
done
if [ -s "$tmpfile" ] ; then
    mail  -s "Disk Space Warning" someone@host <"$tmpfile"
fi
rm -f "$tmpfile"

在这种简化形式下,usep变量略有变化:它仍然附加了'%'符号。我们需要删除百分号以便进行数值比较。Bash具有特殊的参数扩展名,用于删除看起来像后缀${var%pattern}或最长的模式匹配后缀的后缀${var%%pattern}在本例中,由于模式本身是一个百分号,与bash的魔术字符相同,因此我们需要对其进行转义(如${usep%\%})或使用最长匹配命令(如${usep%%%})。

请注意,do while循环位于管道中,因此位于子外壳程序中(我假设您正在使用bash或破折号或类似的外壳程序)。因此,它的任何环境变量都无法幸免于难。临时文件当然可以保留下来,这对于发信号通知是否应该发送消息很有用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如果磁盘空间超过则发送电子邮件

来自分类Dev

使用Powershell通过电子邮件发送硬盘磁盘空间警报

来自分类Dev

如果文件内容超过2行,则发送电子邮件

来自分类Dev

如果jenkins master上的空间不足,则发送电子邮件

来自分类Dev

Python,运行测试,如果失败则发送电子邮件

来自分类Dev

PHPMailer不发送电子邮件(如果构造)

来自分类Dev

如果出错,则跳过发送电子邮件

来自分类Dev

如果用Rails ActionMailer清空电子邮件,如何不发送电子邮件

来自分类Dev

Zabbix:使用操作打印电子邮件中的剩余磁盘空间

来自分类Dev

电子邮件表格未发送电子邮件

来自分类Dev

如何从ELMAH发送电子邮件?

来自分类Dev

使用sendmail发送电子邮件

来自分类Dev

用PHP发送电子邮件

来自分类Dev

使用php发送电子邮件

来自分类Dev

JavaMail无法发送电子邮件

来自分类Dev

Gitlab无法发送电子邮件

来自分类Dev

以横向发送电子邮件给WickedPDF

来自分类Dev

使用mail()发送电子邮件

来自分类Dev

发送电子邮件-MFMailComposeResult

来自分类Dev

Magento未发送电子邮件

来自分类Dev

使用nodemailer发送电子邮件

来自分类Dev

通过Mandrill发送电子邮件

来自分类Dev

选定的按钮发送电子邮件

来自分类Dev

通过gmail发送电子邮件

来自分类Dev

使用VBScript发送电子邮件

来自分类Dev

使用nodemailer发送电子邮件

来自分类Dev

使用Gradle发送电子邮件

来自分类Dev

暂时停止发送电子邮件

来自分类Dev

用表格发送电子邮件