当前位置: 首页 > web >正文

shell脚本作业

需求:

shell脚本需求说明:
1、监控系统中的cpu、内存、硬盘、、使用率超过80%进行邮件告警(可使用邮箱163、QQ、139等)
2、监控系统中的IO await大于50进行邮件告警(可使用邮箱163、QQ、139等)
3、监控系统中的网络流量下载上传超过10M(可变)进行邮件告警(可使用邮箱163、QQ、139等)

实例:

#!/bin/bash# 配置参数
THRESHOLD=80        # 阈值%
IO_AWAIT_THRESHOLD=50    # IO await阈值ms
NETWORK_THRESHOLD=100    # 网络流量阈值MB
INTERFACE="ens33"               # 网络接口名,请根据实际情况修改# QQ邮箱配置
SMTP_SERVER="smtp.qq.com"
SMTP_PORT="587"
EMAIL_FROM="2463230702@qq.com"      # 发件人QQ邮箱
EMAIL_PASSWORD="lxgjuprnpolvdhgj"     # QQ邮箱授权码,不是密码
EMAIL="2463230702@qq.com"         # 收件人邮箱# 获取当前时间
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")# 日志文件
LOG_FILE="/var/log/zya.log"# 创建日志目录
mkdir -p $(dirname "$LOG_FILE")# 记录日志函数
log_message() {echo "[$TIMESTAMP] $1" >> "$LOG_FILE"
}# 发送邮件函数
send_alert_email() {local subject="$1"local content="$2"echo -e "Subject: $subject\n\n$message" | \
SMTP_PASSWORD="$SMTP_PASS" msmtp \--from="$SMTP_USER" \--host="$SMTP_SERVER" \--port="$SMTP_PORT" \--auth=on \--user="$SMTP_USER" \--passwordeval="echo \$SMTP_PASSWORD" \--tls=on \--tls-starttls=on \"$EMAIL"if [ $? -eq 0 ]; thenecho "邮件发送成功: $subject"
elseecho "邮件发送失败: $subject"
fi
}# 检查CPU使用率
check_cpu() {local cpu_usage_int=$(printf "%.0f" "$cpu_usage")if [ "$cpu_usage_int" -gt "$THRESHOLD" ]; thensend_alert_email "CPU" "$cpu_usage_int" "CPU使用率过高,请及时处理"return 1elselog_message "CPU使用率正常: ${cpu_usage_int}%"return 0fi
}# 检查内存使用率
check_memory() {local mem_info=$(free | grep Mem)local total_mem=$(echo $mem_info | awk '{print $2}')local used_mem=$(echo $mem_info | awk '{print $3}')local mem_usage=$(awk "BEGIN {printf \"%.2f\", $used_mem/$total_mem*100}")local mem_usage_int=$(printf "%.0f" "$mem_usage")if [ "$mem_usage_int" -gt "$THRESHOLD" ]; thensend_alert_email "内存" "$mem_usage_int" "内存使用率过高,可能需要释放内存或增加内存"return 1elselog_message "内存使用率正常: ${mem_usage_int}%"return 0fi
}# 检查磁盘使用率
check_disk() {local disk_usage=$(df -h / | grep / | awk '{print $5}' | sed 's/%//g')if [ $disk_usage -ge $THRESHOLD ]; thenlocal subject="磁盘使用率告警"local message="根目录磁盘使用率过高: $disk_usage%,超过阈值$THRESHOLD%。\n时间: $(date)"send_alert "$subject" "$message"echo "磁盘告警已发送: $disk_usage%"fi
}# 检查IO await
check_io_await() {local io_await=$(iostat -x 1 2 | awk '/^avg-cpu/ {getline; getline; print $10}' | tail -n1)local io_await_int=$(printf "%.0f" "$io_await")if [ "$io_await_int" -ge "$IO_AWAIT_THRESHOLD" ]; thenlocal message="IO await过高: ${io_await_int}ms (阈值: ${IO_AWAIT_THRESHOLD}ms)"log_message "警告: $message"send_alert_email "IO await告警 - $TIMESTAMP" "$message\n服务器: $(hostname)"fi
}# 检查网络流量
check_network() {local interface=$(ip route | grep default | awk '{print $5}' | head -n1)local rx_bytes_prev=$(cat /sys/class/net/$interface/statistics/rx_bytes 2>/dev/null)local tx_bytes_prev=$(cat /sys/class/net/$interface/statistics/tx_bytes 2>/dev/null)sleep 1local rx_bytes_next=$(cat /sys/class/net/$interface/statistics/rx_bytes 2>/dev/null)local tx_bytes_next=$(cat /sys/class/net/$interface/statistics/tx_bytes 2>/dev/null)local rx_speed=$(echo "scale=2; ($rx_bytes_next - $rx_bytes_prev) / 1024 / 1024" | bc)local tx_speed=$(echo "scale=2; ($tx_bytes_next - $tx_bytes_prev) / 1024 / 1024" | bc)if [ $(echo "$rx_speed > $NETWORK_THRESHOLD" | bc) -eq 1 ]; thenlocal message="网络下载流量过高: ${rx_speed}MB/s (阈值: ${NETWORK_THRESHOLD}MB/s)"log_message "警告: $message"send_alert_email "网络流量告警 - $TIMESTAMP" "$message\n接口: $interface\n服务器: $(hostname)"fiif [ $(echo "$tx_speed > $NETWORK_THRESHOLD" | bc) -eq 1 ]; thenlocal message="网络上载流量过高: ${tx_speed}MB/s (阈值: ${NETWORK_THRESHOLD}MB/s)"log_message "警告: $message"send_alert_email "网络流量告警 - $TIMESTAMP" "$message\n接口: $interface\n服务器: $(hostname)"fi
}# 主监控函数
main_monitor() {log_message "开始系统监控检查..."check_cpucheck_memorycheck_diskcheck_io_awaitcheck_networklog_message "系统监控检查完成"
}# 执行监控
main_monitor
echo "监控检查完成:$(date)"

问题:

一、 MSMTP邮件安装与配置:

我将帮您创建MSMTP配置文件。以下是配置步骤和说明:

1. 创建配置文件

使用以下命令创建并编辑配置文件:

sudo yum install msmtp
nano ~/.msmtprc
2. 配置文件内容

将以下内容复制到文件中(请替换为您的实际信息):

# 默认账户配置
account default# QQ邮箱SMTP服务器设置
host smtp.qq.com
port 587# 发件人邮箱地址
from your-qq@qq.com# 认证设置
auth on
user your-qq@qq.com
password your-authorization-code# TLS加密设置
tls on
tls_starttls on# 日志文件(可选)
logfile ~/.msmtp.log
3. 重要说明
需要修改的参数:
  • your-qq@qq.com → 您的QQ邮箱地址
  • your-authorization-code授权码(不是QQ密码)
获取授权码步骤:
  1. 登录QQ邮箱网页版
  2. 进入"设置" → “账户”
  3. 开启"POP3/SMTP服务"
  4. 按照提示获取授权码
4. 设置文件权限

为了保护您的密码安全,需要设置正确的文件权限:

chmod 600 ~/.msmtprc
5. 测试配置

使用以下命令测试配置是否正常工作:

echo "Test message" | msmtp -a default recipient@example.com
可选的高级配置

如果您需要更多自定义选项,可以添加以下配置:

# 超时设置
timeout 30# 域名(通常不需要修改)
domain localhost# 邮件格式
auto_from on
maildomain qq.com

这样就完成了MSMTP的配置。您现在可以使用msmtp通过QQ邮箱发送邮件了。

http://www.xdnf.cn/news/20537.html

相关文章:

  • 4.6 多个光源
  • 【数论】P10580 [蓝桥杯 2024 国 A] gcd 与 lcm|普及+
  • MapStruct详解
  • Linux RCU (Read-Copy-Update) 机制深度分析
  • leetcode 912 排序数组(快速排序)
  • 【CV】Opencv图像处理——①几何变换 (1)
  • 神马 M66S+ 282T矿机参数详解:SHA-256算法与Hydro冷却技术
  • 贪心算法应用:食品生产线排序问题详解
  • 继承详解(c++)
  • langchain源码概览
  • Java全栈开发面试实录:从基础到实战的深度解析
  • 【牛客刷题-剑指Offer】BM18 二维数组中的查找:一题四解,从暴力到最优
  • Python元组:不可变但灵活的数据容器
  • LwIP入门实战 — 3 以太网外设 (ETH)
  • 什么是JQ
  • solidity函数篇2
  • Netty从0到1系列之EventLoop
  • 魅族 Note 16 解锁 BL 及 Root 官方刷机包下载Flyme 12.0.1.5A 型号 M521Q
  • 基于SVN搭建企业内部知识库系统实践
  • 试用电子实验记录本ELN的经验之谈
  • 【算法】92.翻转链表Ⅱ--通俗讲解
  • Vue 3项目中引用ECharts并设计多种图表组件的实现方案
  • 行政区划编码树形题解
  • 09_多态
  • `IntersectionObserver`延迟加载不在首屏的自动播放视频/图片/埋点/
  • Boost电路:稳态和小信号分析
  • Linux匿名管道和命名管道以及共享内存
  • C++并发编程指南 递归锁 介绍
  • Kimi K2-0905 256K 上下文 API 状态管理优化教程
  • 2.虚拟内存:分页、分段、页面置换算法