Linux文件系统使用率监控脚本运行未发送告警邮件问题求助
磁盘监控脚本故障排查及修复
前置检查项
- 先确认系统邮件服务本身可用:执行
echo "测试邮件" | mail -s "测试" abc@eee.com,验证是否能正常收到邮件。排查方向包括是否安装mailx/sendmail/postfix组件、对应服务是否启动、服务器25端口是否被封禁。
脚本本身存在的错误
- 多个收件人格式错误:
mail命令的多个收件人需要用空格分隔,你用了分号,分号在Shell中是命令分隔符,会把bbb@eee.com识别为独立命令执行,不会被当成收件人。 - 变量拼写错误:第二个判断中写的变量是
use1,但你实际定义的变量是used1,变量不存在会导致判断条件永远不成立。 - 逻辑结构嵌套错误:你把第二个
if判断直接写在了第一个邮件的EOF分界符之前,这段内容会被当成第一封邮件的正文,第二个判断逻辑完全不会被Shell执行。 - 语法不完整:第一个
mail命令的输入没有对应的EOF结束标记,整体语法结构错误。 - awk语法不规范:
awk {'print $5'}的单引号位置错误,正确写法是awk '{print $5}'。
修正后可用脚本
#!/bin/bash # 使用率阈值(单位%,无需加百分号) max=80 # 提取location1使用率,提前去掉百分号 used=$(df -Ph | grep 'location1' | awk '{print $5}' | sed 's/%//g') # 提取location2使用率,提前去掉百分号 used1=$(df -Ph | grep '/location2' | awk '{print $5}' | sed 's/%//g') # 监控location1 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 # 监控location2 if [ ${used1} -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
内容的提问来源于stack exchange,提问作者Isoboye Bob-manuel
相关产品推荐
相关产品推荐

