设为首页收藏本站

ZMX - IT技术交流论坛 - 无限Perfect,追求梦想 - itzmx.com

 找回密码
 注册论坛

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

用百度帐号登录

只需两步,快速登录

搜索
查看: 1797|回复: 0

Linux centos物理独立服务器使用bash检测硬盘坏道自动mail邮件报警通知脚本

[复制链接]
 成长值: 345

签到天数: 4740 天

[LV.Master]伴坛终老

发表于 2018/9/24 05:39 | 显示全部楼层 |阅读模式 |Google Chrome 69.0.3497.100|Windows 10
天涯海角搜一下: 百度 谷歌 360 搜狗 有道 雅虎 必应 即刻
好了,下方代码,你只用改SEND_TO和mailgun的API KEY就行了,当然,如果你的sendmail可用就不用管mailgun

sendmail客户端,只要没卸载就可以,我一般卸载了,不过也有的会装ssmtp,因为sendmail一般会进垃圾箱,ssmtp可以把sendmail命令变成用smtp发邮件


说明实现,通过smartctl -H,没passed的就告警
所以要安装运行库
  1. yum -y install smartmontools
复制代码

手动尝试运行,确保当前服务器无坏道状态
  1. smartctl -H /dev/sda
复制代码

正常硬盘返回数据
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED


代码
  1. #!/usr/bin/env bash

  2. SEND_TO="@gmail.com"
  3. IP_ADDRESSES=$(ifconfig|grep 'inet '|grep -v '127.0.0.1'|awk '{print $2}')

  4. function send_mail {
  5.     echo "IP address: ${IP_ADDRESSES}" | mail -s "$1 on <$HOSTNAME>!" ${SEND_TO}
  6.     curl -s --user 'api:key-' \
  7.         https://api.mailgun.net/v3/mg.oldcai.com/messages \
  8.         -F from='Disk <notify@mg.oldcai.com>' \
  9.         -F to=${SEND_TO} \
  10.         -F subject="$1 on <$HOSTNAME>!" \
  11.         -F text="IP address: ${IP_ADDRESSES}"
  12.     date
  13. }

  14. function alert_if_empty {
  15. if [ $? != 0 ]; then
  16.     send_mail 'Disk Error'
  17. fi
  18. }

  19. function check_drive {
  20.     echo "checking ${1}"
  21.     smartctl -l error /dev/${1} | grep 'No Errors Logged\|SMART Error Log not supported'
  22.     alert_if_empty
  23.     smartctl -H /dev/${1} | grep 'PASSED'
  24.     alert_if_empty
  25. }

  26. lsblk -d|awk '{print $1}'|grep -v 'NAME' | while read drive;
  27. do
  28.     check_drive ${drive}
  29. done

  30. df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' | while read output;
  31. do
  32.     echo $output
  33.     usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1  )
  34.     re='^[0-9]+


  35.     if [[ $usep =~ $re ]] ; then
  36.         partition=$(echo $output | awk '{ print $2 }' )
  37.         if (( $usep > 95 )); then
  38.             echo "Running out of space "$partition ($usep%)" on $(hostname) as on $(date)" |
  39.             send_mail "Disk Almost out of disk space $usep%"
  40.         fi
  41.     fi
  42. done
复制代码


欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册论坛 新浪微博账号登陆用百度帐号登录

本版积分规则

手机版|Archiver|Mail me|网站地图|IT技术交流论坛 ( 闽ICP备13013206号-7 )

GMT+8, 2024/12/26 09:15 , Processed in 0.142212 second(s), 19 queries , MemCache On.

Powered by itzmx! X3.4

© 2011- sakura

快速回复 返回顶部 返回列表