crontab + mutt 实现Linux服务器监控,硬盘空间不足自动发送邮件

crontab + mutt 实现Linux服务器监控,硬盘空间不足自动发送邮件

实验室的博士们进行深度学习相关实验的时候,常会大量的保存模型和数据,而很少会进行删除操作,经常遇到硬盘空间不足导致所有程序被迫停止,所以这里提供定时监控并自动发送邮件警告的方案

配置邮件相关功能(QQ邮箱为例)

  1. 首先登录QQ邮箱(网页为例),进入设置-账户-POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务
    • 开启 POP3/SMTP服务 这时会弹窗显示一串字符,记下来,这是配置该服务的 登录key
  2. 在Linux服务器安装相关工具(mutt 和 msmtp)
sudo apt-get install mutt
sudo apt-get install msmtp
  1. 创建和修改基础配置文件
    3.1 创建修改 ~/.muttrc 文件

    vim ~/.muttrc
    # 输入以下内容
    
    set sendmail="/usr/bin/msmtp"
    set use_from=yes
    set realname="CustomName" # 自定义名称,你接受到邮件,邮件的发件方名称就是这个字段,建议数字or英文
    set from=QQ号码@qq.com # 发件方的QQ号码,不是收件方的,实际上Linux会以这个邮箱的身份发出邮件
    set envelope_from=yes
    

    3.2 创建修改 msmtp 文件

    创建日志文件
    touch ~/.msmtp.log
    
    account default
    host smtp.qq.com
    user QQ号码 # 这里不能随意填写,必须是qq邮箱@符号之前的内容,一般就是QQ号码
    from QQ邮箱完整地址 # 和上面配置一致
    password 登录key # 这里是你开启POP3/SMTP服务时生成的一串登录key,!!!不是QQ邮箱登录密码!!!
    auth login
    tls off
    logfile ~/.msmtp.log
    

    3.3 修改权限 !!!必须进行,不然报错

    # 因为 ~/.msmtprc 明文保存了key,这里必须修改权限为600
    chmod 600 ~/.msmtprc
    
  2. 测试功能
    4.1 测试服务基本状态
    msmtp --host=smtp.qq.com --serverinfo
    4.2 测试发送邮件

    echo "hello world" | mutt -s "邮件主题" 目标邮箱 -c 抄送对象
    # 其中抄送对象可有可无,因为我需要通知实验室的其他成员,所以会使用抄送功能
    # 另外也可以发送附件,但是我没这个需求,以及带宽有限,就没有配置
    

    4.3 使用管道指令发送硬盘占用详细信息给指定账户

    # 总所周知,df -h 指令是查看硬盘占用情况的,我希望将这个信息作为正文发送给各方则使用如下指令
    df -h | mutt -s "邮件主题" 目标邮箱 -c 抄送对象
    
    # 如果希望把文件读取并作为正文发送给对方,则可以使用
    cat ./my_file.txt | mutt -s "邮件主题" 目标邮箱
    
    

crontab 实现定时检查并发送预警邮件

这里我使用的是定时运行python脚本进行信息统计、检测、发送

  1. crontab 配置方案
    # 1. 查看当前正在执行的crontab脚本
    crontab -l
    
    # 2. 编辑新的crontab脚本
    crontab -u user -e # -u user 是指定用户的crontab脚本,即当前使用Linux的用户
    
    # 3. crontab 设置每小时运行一次
    0 */1 * * * /bin/bash /home/user/my_disk_monitor/run.sh
    
  2. crontab 的一些坑
    1. crontab真正执行的时候,并不是在我们设想的工作目录下执行的,而是crontab的目录下执行,所以上述举例,我是使用的绝对路径
    2. crontab任务执行失败也不会报错
# run.sh 举例
cd /home/user/my_disk_monitor/ # 因为crontab执行的路径问题,这里首先cd到当前目录
# 实际上要进行的检测不只是硬盘容量检测,还有别的相关检测,所以我使用的是运行python脚本的方法
MY_PYTHON=我的python路径(最好是绝对路径)
EXEC=/home/user/my_disk_monitor/run.py # 实际执行的python脚本绝对路径
$MY_PYTHON $EXEC # 这里就实际调用执行了当前脚本
  • python 脚本中如何执行 sh 命令
import os
_sh_cmd = 'cat ./my_file.txt | mutt -s "邮件主题" 目标邮箱'
os.system(_sh_cmd) # 这样就可以

你可能感兴趣的:(服务器,linux,运维)