如何实现Linux服务器硬件运行状态及故障邮件提醒的监控脚本
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,小编给大家分享一下如何实现Linux服务器硬件运行状态及故障邮件提醒的监控脚本,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧
千家信息网最后更新 2026年11月02日如何实现Linux服务器硬件运行状态及故障邮件提醒的监控脚本
小编给大家分享一下如何实现Linux服务器硬件运行状态及故障邮件提醒的监控脚本,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
监控硬件运行状况
shell 监控cpu,memory,load average,记录到log,当负载压力时,发电邮通知管理员。
原理:
1.获取cpu,memory,load average的数值
2.判断数值是否超过自定义的范围,例如(CPU>90%,Memory<10%,load average>2)
3.如数值超过范围,发送电邮通知管理员。发送有时间间隔,每小时只会发送一次。
4.将数值写入log。
5.设置crontab 每30秒运行一次。
ServerMonitor.sh
#!/bin/bash # 系统监控,记录cpu、memory、load average,当超过规定数值时发电邮通知管理员 # *** config start *** # 当前目录路径 ROOT=$(cd "$(dirname "$0")"; pwd) # 当前服务器名 HOST=$(hostname) # log 文件路径 CPU_LOG="${ROOT}/logs/cpu.log" MEM_LOG="${ROOT}/logs/mem.log" LOAD_LOG="${ROOT}/logs/load.log" # 通知电邮列表 NOTICE_EMAIL='admin@admin.com' # cpu,memory,load average 记录上一次发送通知电邮时间 CPU_REMARK='/tmp/servermonitor_cpu.remark' MEM_REMARK='/tmp/servermonitor_mem.remark' LOAD_REMARK='/tmp/servermonitor_loadaverage.remark' # 发通知电邮间隔时间 REMARK_EXPIRE=3600 NOW=$(date +%s) # *** config end *** # *** function start *** # 获取CPU占用 function GetCpu() { cpufree=$(vmstat 1 5 |sed -n '3,$p' |awk '{x = x + $15} END {print x/5}' |awk -F. '{print $1}') cpuused=$((100 - $cpufree)) echo $cpuused local remark remark=$(GetRemark ${CPU_REMARK}) # 检查CPU占用是否超过90% if [ "$remark" = "" ] && [ "$cpuused" -gt 90 ]; then echo "Subject: ${HOST} CPU uses more than 90% $(date +%Y-%m-%d' '%H:%M:%S)" | sendmail ${NOTICE_EMAIL} echo "$(date +%s)" > "$CPU_REMARK" fi } # 获取内存使用情况 function GetMem() { mem=$(free -m | sed -n '3,3p') used=$(echo $mem | awk -F ' ' '{print $3}') free=$(echo $mem | awk -F ' ' '{print $4}') total=$(($used + $free)) limit=$(($total/10)) echo "${total} ${used} ${free}" local remark remark=$(GetRemark ${MEM_REMARK}) # 检查内存占用是否超过90% if [ "$remark" = "" ] && [ "$limit" -gt "$free" ]; then echo "Subject: ${HOST} Memory uses more than 90% $(date +%Y-%m-%d' '%H:%M:%S)" | sendmail ${NOTICE_EMAIL} echo "$(date +%s)" > "$MEM_REMARK" fi } # 获取load average function GetLoad() { load=$(uptime | awk -F 'load average: ' '{print $2}') m1=$(echo $load | awk -F ', ' '{print $1}') m5=$(echo $load | awk -F ', ' '{print $2}') m15=$(echo $load | awk -F ', ' '{print $3}') echo "${m1} ${m5} ${m15}" m1u=$(echo $m1 | awk -F '.' '{print $1}') local remark remark=$(GetRemark ${LOAD_REMARK}) # 检查是否负载是否有压力 if [ "$remark" = "" ] && [ "$m1u" -gt "2" ]; then echo "Subject: ${HOST} Load Average more than 2 $(date +%Y-%m-%d' '%H:%M:%S)" | sendmail ${NOTICE_EMAIL} echo "$(date +%s)" > "$LOAD_REMARK" fi } # 获取上一次发送电邮时间 function GetRemark() { local remark if [ -f "$1" ] && [ -s "$1" ]; then remark=$(cat $1) if [ $(( $NOW - $remark )) -gt "$REMARK_EXPIRE" ]; then rm -f $1 remark="" fi else remark="" fi echo $remark } # *** function end *** cpuinfo=$(GetCpu) meminfo=$(GetMem) loadinfo=$(GetLoad) echo "cpu: ${cpuinfo}" >> "${CPU_LOG}" echo "mem: ${meminfo}" >> "${MEM_LOG}" echo "load: ${loadinfo}" >> "${LOAD_LOG}" exit 0
监控网站是否异常
shell 监控网站是否异常的脚本,如有异常自动发电邮通知管理员。
流程:
1.检查网站返回的http_code是否等于200,如不是200视为异常。
2.检查网站的访问时间,超过MAXLOADTIME(10秒)视为异常。
3.发送通知电邮后,在/tmp/monitor_load.remark记录发送时间,在一小时内不重复发送,如一小时后则清空/tmp/monitor_load.remark。
#!/bin/bash SITES=("http://web01.example.com" "http://web02.example.com") # 要监控的网站 NOTICE_EMAIL='me@example.com' # 管理员电邮 MAXLOADTIME=10 # 访问超时时间设置 REMARKFILE='/tmp/monitor_load.remark' # 记录时否发送过通知电邮,如发送过则一小时内不再发送 ISSEND=0 # 是否有发送电邮 EXPIRE=3600 # 每次发送电邮的间隔秒数 NOW=$(date +%s) if [ -f "$REMARKFILE" ] && [ -s "$REMARKFILE" ]; then REMARK=$(cat $REMARKFILE) # 删除过期的电邮发送时间记录文件 if [ $(( $NOW - $REMARK )) -gt "$EXPIRE" ]; then rm -f ${REMARKFILE} REMARK="" fi else REMARK="" fi # 循环判断每个site for site in ${SITES[*]}; do printf "start to load ${site}\n" site_load_time=$(curl -o /dev/null -s -w "time_connect: %{time_connect}\ntime_starttransfer: %{time_starttransfer}\ntime_total: %{time_total}" "${site}") site_access=$(curl -o /dev/null -s -w %{http_code} "${site}") time_total=${site_load_time##*:} printf "$(date '+%Y-%m-%d %H:%M:%S')\n" printf "site load time\n${site_load_time}\n" printf "site access:${site_access}\n\n" # not send if [ "$REMARK" = "" ]; then # check access if [ "$time_total" = "0.000" ] || [ "$site_access" != "200" ]; then echo "Subject: ${site} can access $(date +%Y-%m-%d' '%H:%M:%S)" | sendmail ${NOTICE_EMAIL} ISSEND=1 else # check load time if [ "${time_total%%.*}" -ge ${MAXLOADTIME} ]; then echo "Subject: ${site} load time total:${time_total} $(date +%Y-%m-%d' '%H:%M:%S)" | sendmail ${NOTICE_EMAIL} ISSEND=1 fi fi fi done # 发送电邮后记录发送时间 if [ "$ISSEND" = "1" ]; then echo "$(date +%s)" > $REMARKFILE fi exit 0以上是"如何实现Linux服务器硬件运行状态及故障邮件提醒的监控脚本"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
电邮
时间
监控
数值
管理员
网站
检查
管理
运行
小时
服务器
硬件
脚本
服务
篇文章
邮通
发电
故障
状态
邮件
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
湖南永感互联网科技有限公司
高科技互联网
互联网和科技技术
鸠鸠互联网科技
互联网与科技发展
互联网科技与金融科技
互联网科技集团
互联网科技作文
奇士达互联网科技
美国互联网黑科技
万达互联网科技
互联网 科技服务平台
滨湖区互联网智能科技产品供应
济南和联互联网科技有限公司
广州市恰铎互联网科技有限公司
深圳育鹏互联网科技有限公司招聘
互联网科技研发水平
唯美互联网科技
唐山双旺合互联网科技产业园
互联网科技创新方面的资料
新华互联网科技学校
互联网科技卖菜
西安互联网科技
互联网汽车科技小镇
互联网科技有哪些公司
受益于互联网科技的高速发展
互联网科技大赛获奖感言
半导体是互联网高科技吗
本届互联网大会上的黑科技
安徽零酒互联网科技有限公司