【linux】linux监控硬盘达到使用情况,进行邮箱通知

文章目录

linux监控硬盘达到使用情况,进行邮箱通知

需要使用到的工具:一台linux系统的服务器

安装的软件:smartmontools mailutils

安装要用到的软件

bash 复制代码
yum install smartmontools -y # 安装smartmontools
yum  -y install mailx -y # 安装mailutils
yum install dos2unix -y # 安装dos2unix 

配置smartmontools

安装好smartmontools一会会在etc下面出现一个这个文件夹

编辑/etc/smartmontools/smartd.conf配置文件,设置对硬盘的监控。

bash 复制代码
# 找到 DEVICESCAN 行,并取消注释
DEVICESCAN -H -m root@example.com

这里的-H选项会在硬盘发生故障时发送警告邮件给root用户。-m后跟的是接收警告的邮箱地址。

配置mail

我这里使用的是qq邮箱,其他邮箱对应的操作即可

  1. 登录qq邮箱 找到设置 - > 账号
  2. 账号往下翻,找到POP3/IMAP...,开启pop3/SMTP、IMAP/SMTP,点击生成授权码,手机验证

    点击这里,按照他的操作,到最后会得到一个授权码复制先保存下来
  3. 进行配置对应的mail
    mail命令的系统级配置文件是/etc/mail.rc
bash 复制代码
vi  /etc/mail.rc
# 最好是使用可视化进行操作,把对应的给配置上即可,有些配置已经给配置好了,不需要再次进行配置
set bsdcompat
set from=1111111@qq.com    #设置邮件发送方
set smtp=smtps://smtp.qq.com:465  #邮件服务器,我这里是qq
set smtp-auth-user=1111111@qq.com	#smtp验证用户邮箱
set smtp-auth-password=cdesllrlz111111 #邮箱授权码
set smtp-auth=login 	#认证方式
set ssl-verify=ignore	#忽略SSL验证
set nss-config-dir=/root/.certs   #证书目录
  1. 生成邮箱秘钥
    后期使用中,用哪个账号发送邮件,就生成到谁的目录下!!
    我用root 证书目录为/root/.certs
bash 复制代码
sudo mkdir -p  /root/.certs   #创建证书目录
sudo bash -c "echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /root/.certs/qq.crt  "   #获取邮件服务器证书
sudo chmod +x /root/.certs/qq.crt       #qq.crt 添加执行权限
sudo bash -c 'certutil -A -n "GeoTrust Global CA" -t "C,," -d /root/.certs -i /root/.certs/qq.crt'   #添加global证书到数据库
sudo bash -c 'certutil -A -n "GeoTrust SSL CA" -t "C,," -d /root/.certs -i /root/.certs/qq.crt' #添加SSL证书到数据库
sudo bash -c 'certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d  /root/.certs -i /root/.certs/qq.crt' #指定受信任证书,防报错

注:执行sudo bash -c 'certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d /root/.certs -i /root/.certs/qq.crt'

会跳出"Notice: Trust flag u is set automatically if the private key is present."

bash 复制代码
sudo certutil -L -d /root/.certs  
#列出安全数据库中的证书

这里有证书列出来,证明配置成功了

可以通过命令进行测试是否安装正常

bash 复制代码
echo "信息内容" | mail -s "标题" your_email@example.com 

写执行的脚本,进行邮箱通知

创建一个监控硬盘占用率的脚本check_disk_usage.sh:

bash 复制代码
#!/bin/bash

# 设置邮箱地址
EMAIL="your_email@example.com"

# 设置要监控的挂载点
MOUNT_POINT="/"

# 设置占用率阈值
THRESHOLD=95

# 获取当前硬盘占用率
USAGE=$(df | grep$MOUNT_POINT | awk '{print $5}' | sed 's/%//g')

# 检查是否达到阈值
if [ "$USAGE" -ge "$THRESHOLD" ]; then
    # 获取硬盘使用详细信息
    USAGE_DETAIL=$(df -h$MOUNT_POINT)
    # 发送邮件
    echo "警告: $MOUNT_POINT 硬盘占用率已达到${THRESHOLD}% 或以上。$USAGE_DETAIL" | mail -s "硬盘占用率警告"$EMAIL
fi
  1. 给与脚本权限
bash 复制代码
chmod +x check_disk_usage.sh
  1. 设置定时任务
    接下来,设置一个cron定时任务来定期执行这个脚本。
bash 复制代码
crontab -e

在打开的文件中添加以下行来设置定时任务:

这个脚本是五分钟去执行一次刚才创建好的脚本

bash 复制代码
*/5 * * * * /path/to/check_disk_usage.sh

测试脚本是否写好,可以通过 ./check_disk_usage.sh执行脚本,查看是否有报错信息

调试脚本可以通过

bash 复制代码
# 启用调试模式
set -x
# 关闭调试模式
set +x

这里有一个问题,

问题出在USAGE变量没有被正确设置。这可能是由于df命令的输出格式与脚本中的awk和grep命令期望的格式不匹配。你需要检查df命令的输出,然后相应地调整脚本中的命令。

以下是你可以执行的一个命令,来查看df命令的实际输出:

bash 复制代码
df | grep ' / '

根据输出,你可能需要调整awk命令中的字段索引(例如,如果占用率在第六列,你应该使用$6而不是$5)。

一旦你确定了正确的字段索引,你可以更新脚本中的相应部分,如下所示:

bash 复制代码
USAGE=$(df | grep "$MOUNT_POINT " | awk '{print $5}' | sed 's/%//g')

确保$5是df命令输出中占用率所在的实际列。

如果 df | grep ' / ' 没有任何输出,换用

bash 复制代码
df | grep ' /$'

查看是否有输出

注意,这里使用了正则表达式中的 $ 符号,它表示行的末尾,这样可以确保只匹配那些以 / 结尾的行。

接下来,你可以更新脚本中的 USAGE 变量赋值行,确保它能够正确地从 df 命令的输出中提取使用率。例如:

bash 复制代码
USAGE=$(df | grep ' /$' | awk '{print $5}' | sed 's/%//g')

请确保 awk 中的 {print $5} 与 df 命令输出中磁盘使用百分比的列相对应。如果使用百分比的列是第 5 列,那么上述命令就是正确的。如果不是,请根据实际输出调整列号。

相关推荐
Karoku06629 分钟前
【CI/CD】CI/CD环境搭建流程和持续集成环境配置
运维·ci/cd·docker·容器·kubernetes·prometheus
Nerd Nirvana2 小时前
软考—系统架构设计(案例 | 论文)
linux·系统架构·软件工程·软考·计算机基础
勤奋的凯尔森同学3 小时前
webmin配置终端显示样式,模仿UbuntuDesktop终端
linux·运维·服务器·ubuntu·webmin
丁卯4044 小时前
Go语言中使用viper绑定结构体和yaml文件信息时,标签的使用
服务器·后端·golang
chengooooooo4 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
人间打气筒(Ada)6 小时前
MySQL主从架构
服务器·数据库·mysql
落笔画忧愁e7 小时前
FastGPT快速将消息发送至飞书
服务器·数据库·飞书
小冷爱学习!7 小时前
华为动态路由-OSPF-完全末梢区域
服务器·网络·华为
技术小齐8 小时前
网络运维学习笔记 016网工初级(HCIA-Datacom与CCNA-EI)PPP点对点协议和PPPoE以太网上的点对点协议(此处只讲华为)
运维·网络·学习
ITPUB-微风8 小时前
Service Mesh在爱奇艺的落地实践:架构、运维与扩展
运维·架构·service_mesh