怎么让服务器给自己的邮箱发消息【shell脚本】
需求编写一个监控脚本定时检查系统的 CPU 使用率如果 CPU 使用率超过设定阈值临界值90%向指定邮箱发送警报邮件。如果 CPU 使用率恢复到正常范围内则不发送邮件。邮件内容需包含 CPU 使用率并且要求中文内容无乱码。需要提前安装工具bc、sendmailbc用于小数类型数字的计算sendmail服务用于向指定邮箱发送邮件FQDN主机名称定义规范不能使用简单的名称作为主机名比如node1、node2、node3要求一般是主机功能 公司的域名 FQDN知识点解析1下两个小工具dnf install bc -y dnf install sendmail -y systemctl start sendmailbc一款命令行下的高精度计算器工具支持浮点数运算、脚本式计算常用于 Shell 脚本中做数学运算#看一下bc是否能正常使用 echo 100 - 98.5 |bcsendmail经典的 MTA邮件传输代理程序用于在 Linux 系统中发送邮件比如脚本的告警通知、日志报告等#看一下sendmail是否能正常使用 echo -e CPU使用率过载! \n 请及时关注! | sendmail -t 换成自己的邮箱\n是echo -e支持的换行符所以邮件正文会分成两行显示更易读-e就是让echo认识\n、\t这类 “反斜杠 字母” 的特殊格式符并把它们变成换行、空格等效果而不是原样输出常用转义符配合-e\n换行\t制表符相当于按 Tab\\输出一个反斜杠\\a响铃嘟嘟一声2主机名必须满足FQDN协议在启动sendmail服务之前需要更改主机名称主机名称必须满足FQDN协议否则会导致邮件无法发送 FQDN主机格式要求主机名称/功能 公司域名web.itcast.cn、mysql.itcast.cn、node1.itcast.cnhostnamectl set-hostname centos9.itcast.cn3编写脚本空字符串判断与正则判断CPU使用率获取时可能出现获取不到的情况为了避免后续判断出现异常则可以提前判断cpu空闲率有没有获取到指定信息。#判断cpu_idle这个变量是否为空 -z $cpu_idle它的逻辑是如果$cpu_idle为空比如获取失败没拿到数据[ -z $cpu_idle ]的结果就是true会进入if分支执行告警或退出。如果$cpu_idle不为空正常拿到了数据条件为false跳过这段判断! $cpu_idle ~ ^[0-9](\.[0-9])?$作用是如果$cpu_idle不是一个合法的非负数字整数 / 小数就执行异常处理比如报错、退出脚本使用bc进行小数判断echo 3 2 |bcbc的输出比较特殊与$?正好相反输出了1这是bc对3 2这个比较表达式的判断结果1代表 条件为真true也就是3 2成立。如果条件不成立比如2 3bc会输出0代表 条件为假false把当前 CPU 的空闲率idle 值提取出来存到变量free_usage里供后续告警脚本使用free_usage$(top -bn1|grep Cpu |tr -d ,|tr -s |cut -d -f8)top -bn1截屏一个top命令的数据管道给后面的命令grep Cpu 只要带Cpu的数据tr -d ,把逗号都删了tr -s 把连续空格压缩成一个空格id前面的这个就是cpu我们把它截取出来cut -d -f8 以空格为分隔符 截取第8列完整代码#!/bin/bash #1.定义cpu告警的阈值,一般设置为80-90我们测试用先设置低一点看脚本能不能跑 threshold2 #2.设置邮箱变量最好设置163邮箱qq邮箱容易被判为垃圾邮箱 email你的邮箱地址 #3.使用whi1le循环进行不间断的监控 while true do #为每条检测信息附上时间 current_time$(date %F %T) free_usage$(top -bn1|grep Cpu |tr -d ,|tr -s |cut -d -f8) #2,判断是否能够获得到准确的cpu空闲率 if [[ -z $free_usage || ! $free_usage ~ ^[0-9](\.[0-9])?$ ]];then free_usage$(top -bn1|grep Cpu |tr -d ,|tr -s |cut -d -f8) fi usage$(echo 100 - $free_usage|bc) #由于空闲率可能存在小数我们通告bc比较 value$(echo $usage $threshold | bc -l) if [ $value -eq 1 ]; then echo -e CPU超阈值 \n 请检查 | sendmail -t $email fi done压测命令用来给服务器做CPU 压力测试的工具sudo dnf install stress-ng使用以下命令启动 4 个工作线程来进行 CPU 压测每个线程会占用一个 CPU 核心stress-ng --cpu 4 --timeout 60s--cpu 4 表示启动 4 个进程来占用 CPU模拟 4 核的压测。--timeout 60 表示压测持续 60 秒。