【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 列,那么上述命令就是正确的。如果不是,请根据实际输出调整列号。

相关推荐
王同学要变强13 分钟前
docker login 出错 Error response from daemon
运维·docker·容器
迷路爸爸18022 分钟前
Rustdesk 安装客户端以及自己搭建服务器跑通参考资料
运维·服务器
烁月_o929 分钟前
网络安全之漏洞
linux·网络·安全·web安全·信息与通信
hyf_code41 分钟前
Midjourney Describe API 的对接和使用
java·服务器·midjourney
PanYu——BJ42 分钟前
Linux 安装NFS共享文件夹
linux·运维·服务器
IT修炼家1 小时前
Ubuntu server安装中文支持
linux·服务器·ubuntu
汪款学嵌入式2 小时前
VMware虚拟机 Ubuntu没有共享文件夹的问题
linux·运维·ubuntu
chengma_0909092 小时前
linux离线安装部署redis
linux·redis·bootstrap
黑客Ash2 小时前
DVWA亲测sql注入漏洞
服务器·网络·数据库·sql·web安全·oracle·php