Linux:尝试监控不同的 linux 文件系统大小并将邮件发送给 2 人或更多人

Posted

技术标签:

【中文标题】Linux:尝试监控不同的 linux 文件系统大小并将邮件发送给 2 人或更多人【英文标题】:Linux: Trying to monitor different linux filesystem sizes and send mail to 2 or more people 【发布时间】:2021-11-22 13:25:06 【问题描述】:

我创建了一个 .sh 文件来监控 2 个文件路径并将磁盘大小发送给我。它运行,我没有收到邮件。文件系统>90%

#!/bin/bash
used=$(df -Ph | grep 'location1' | awk 'print $5') 
used1=$(df -Ph | grep '/location2' | awk 'print $5') 
max=80% 
if [ $used%? -gt $max%? ]; then mail -s 'Disk space alert' abc@eee.com;bbb@eee.com << EOF
The Mount Point "location1" on $(hostname) has used $used at $(date);
if [ $use1%? -gt $max%? ]; then mail -s 'Disk space alert' abc@eee.com; bbb@eee.com << EOF
The Mount Point "location2" on $(hostname) has used $used1 at $(date);

EOF
fi

【问题讨论】:

如果你给出mail的完整路径会发生什么? 您的第一个 if 缺少 EOFfi。你的第二个if 使用了一个未定义的变量use1 您确定您的grep 调用每个都只返回一个结果吗?如果不是,-gt 会出现语法错误 It runs and I don't get a mail sooo,你配置你的电脑发送邮件了吗? @jhnc:是的,谢谢,我错过了。 【参考方案1】:

谢谢大家,我已经弄明白了。

#!/bin/bash
used=$(df -Ph | grep 'location1' |  awk 'print $5' | sed 's/%//g' ) 

used1=$(df -Ph | grep 'location2' |  awk 'print $5' | sed 's/%//g' ) 

max=80% 
if [ $used%? -gt $max%? ]; then 

if [ $use1%? -gt $max%? ]; then 
mail -s 'Disk space alert' abc@eee.com bbb@eee.com << EOF

The Mount Point 'location2' on $(hostname) has used $used1 at $(date);

EOF
fi
fi

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。【参考方案2】:

您未能包含EOF 标记,因此其余代码隐藏在此处的文档中。 (您问题中的语法着色应该可以帮助您注意。)

顺便说一句,你想避免useless grep 并修复你的缩进。我也猜你不希望第二个 if 仅在第一个触发时触发。

#!/bin/bash
used=$(df -Ph | awk '/location1/  print $5') 
used1=$(df -Ph | awk '/\/location2/  print $5') 
max=80%
if [ $used%? -gt $max%? ]; then
  mail -s 'Disk space alert' abc@eee.com;bbb@eee.com <<__EOF
The Mount Point "location1" on $(hostname) has used $used at $(date);
__EOF
fi
if [ $use1%? -gt $max%? ]; then
  mail -s 'Disk space alert' abc@eee.com; bbb@eee.com <<__EOF
The Mount Point "location2" on $(hostname) has used $used1 at $(date);
__EOF
fi

代码重复较少的更惯用的解决方案将循环参数。

#!/bin/bash
max=80
for mountpoint in location /location2; do
    used=$(df -Ph "$mountpoint" | awk 'NR>1  print $5') 
  if [ $used%? -gt $max ]; then
    mail -s 'Disk space alert' abc@eee.com;bbb@eee.com <<____EOF
The Mount Point "$mountpoint" on $(hostname) has used $used at $(date);
____EOF
  fi
done

【讨论】:

以上是关于Linux:尝试监控不同的 linux 文件系统大小并将邮件发送给 2 人或更多人的主要内容,如果未能解决你的问题,请参考以下文章

Shell 脚本实现 Linux 系统监控

Linux shell磁盘监控

Linux命令应用大词典-第32章 性能监控

使用nmon进行系统监控

linux_nmon监控方法

Linux培训教程 linux系统下分割大文件的方法