shell获取主机信息并根据定时任务发送邮件到手机

本文提供了一个详细的Linux系统监控脚本,用于收集主机的CPU、内存、磁盘I/O等关键信息,并通过邮件发送报告。脚本涵盖了日期时间戳、IP地址、CPU利用率、内存使用情况、磁盘I/O统计等多个方面的数据,对于系统管理员进行性能分析和故障排查非常有用。此外,还介绍了如何通过crontab设置定时执行以及邮件配置。
摘要由CSDN通过智能技术生成

**

获取主机信息相关shell命令,copy出去直接可用

**

#!/bin/bash
ztday=`date +%Y%m%d%H%M`
fileName="cpu_mem${ztday}.log"

echo "获取主机信息时间 :"`date +'%Y年%m月%d日 %H:%M:%S'`>>$fileName

# 获取要监控的本地服务器IP地址
#IPv4=`ifconfig | grep inet | grep -vE 'inet6|127.0.0.1' | awk '{print $2}'`
#v=`ifconfig eth0 | awk "NR==2" | awk -F " " '{print $2}'`
v1=`ifconfig | grep -A1 "eth0" | grep 'inet'|awk -F ' ' '{print $2}'|awk '{print $1}'`
echo "IPv4私网地址:"$v1>>$fileName
echo "IPv4公网地址:" `curl ifconfig.me`>>$fileName
 
# 获取cpu总核数
cpu_num=`grep -c "model name" /proc/cpuinfo`
echo "cpu总核数:"$cpu_num>>$fileName
 
# 获取用户空间占用CPU百分比
cpu_user=`top -b -n 1 | grep Cpu | awk '{print $2}' | cut -f 1 -d "%"`
echo "用户空间占用CPU百分比:"$cpu_user>>$fileName
 
# 获取内核空间占用CPU百分比
cpu_system=`top -b -n 1 | grep Cpu | awk '{print $4}' | cut -f 1 -d "%"`
echo "内核空间占用CPU百分比:"$cpu_system>>$fileName
 
# 获取空闲CPU百分比
cpu_idle=`top -b -n 1 | grep Cpu | awk '{print $8}' | cut -f 1 -d "%"`
echo "空闲CPU百分比:"$cpu_idle>>$fileName
 
# 获取等待输入输出占CPU百分比
cpu_iowait=`top -b -n 1 | grep Cpu | awk '{print $10}' | cut -f 1 -d "%"`
echo "等待输入输出占CPU百分比:"$cpu_iowait>>$fileName
 
#2、获取CPU上下文切换和中断次数
# 获取CPU中断次数
cpu_interrupt=`vmstat -n 1 1 | sed -n 3p | awk '{print $11}'`
echo "CPU中断次数:"$cpu_interrupt>>$fileName
 
# 获取CPU上下文切换次数
cpu_context_switch=`vmstat -n 1 1 | sed -n 3p | awk '{print $12}'`
echo "CPU上下文切换次数:"$cpu_context_switch>>$fileName
 
#3、获取CPU负载信息
# 获取CPU15分钟前到现在的负载平均值
cpu_load_15min=`uptime | awk '{print $11}' | cut -f 1 -d ','`
echo "CPU 15分钟前到现在的负载平均值:"$cpu_load_15min>>$fileName
 
# 获取CPU5分钟前到现在的负载平均值
cpu_load_5min=`uptime | awk '{print $10}' | cut -f 1 -d ','`
echo "CPU 5分钟前到现在的负载平均值:"$cpu_load_5min>>$fileName
 
# 获取CPU1分钟前到现在的负载平均值
cpu_load_1min=`uptime | awk '{print $9}' | cut -f 1 -d ','`
echo "CPU 1分钟前到现在的负载平均值:"$cpu_load_1min>>$fileName
 
# 获取任务队列(就绪状态等待的进程数)
cpu_task_length=`vmstat -n 1 1 | sed -n 3p | awk '{print $1}'`
echo "CPU任务队列长度:"$cpu_task_length>>$fileName
 
#4、获取内存信息
# 获取物理内存总量
mem_total=`free | grep Mem | awk '{print $2}'`
x=1024
aa=`expr $mem_total / $x`
echo "物理内存总量:"$aa M>>$fileName
 
# 获取操作系统已使用内存总量
mem_sys_used=`free | grep Mem | awk '{print $3}'`
bb=`expr $mem_sys_used / $x`
echo "已使用内存总量(操作系统):"$bb M>>$fileName
 
# 获取操作系统未使用内存总量
mem_sys_free=`free | grep Mem | awk '{print $4}'`
cc=`expr $mem_sys_free / $x`
echo "剩余内存总量(操作系统):"$cc M>>$fileName
 
# 获取应用程序已使用的内存总量
mem_user_used=`free | sed -n 3p | awk '{print $3}'`
dd=`expr $mem_user_used / $x`
echo "已使用内存总量(应用程序):"$dd M>>$fileName
 
# 获取应用程序未使用内存总量
mem_user_free=`free | sed -n 3p | awk '{print $4}'`
ee=`expr $mem_user_free / $x`
echo "剩余内存总量(应用程序):"$ee M>>$fileName
 
 
# 获取交换分区总大小
mem_swap_total=`free | grep Swap | awk '{print $2}'`
ff=`expr $mem_swap_total / $x`
echo "交换分区总大小:"$ff M>>$fileName
 
# 获取已使用交换分区大小
mem_swap_used=`free | grep Swap | awk '{print $3}'`
gg=`expr $mem_swap_used / $x`
echo "已使用交换分区大小:"$gg M>>$fileName
 
# 获取剩余交换分区大小
mem_swap_free=`free | grep Swap | awk '{print $4}'`
hh=`expr $mem_swap_free / $x`
echo "剩余交换分区大小:"$hh M>>$fileName
 

#5、获取磁盘I/O统计信息
echo "指定设备(/dev/vda)的统计信息">>$fileName
# 每秒向设备发起的读请求次数
disk_sda_rs=`iostat -kx | grep vda| awk '{print $4}'`
echo "每秒向设备发起的读请求次数:"$disk_sda_rs>>$fileName
 
# 每秒向设备发起的写请求次数
disk_sda_ws=`iostat -kx | grep vda| awk '{print $5}'`
echo "每秒向设备发起的写请求次数:"$disk_sda_ws>>$fileName
 
# 向设备发起的I/O请求队列长度平均值
disk_sda_avgqu_sz=`iostat -kx | grep vda| awk '{print $9}'`
echo "向设备发起的I/O请求队列长度平均值"$disk_sda_avgqu_sz>>$fileName
 
# 每次向设备发起的I/O请求平均时间
disk_sda_await=`iostat -kx | grep vda| awk '{print $10}'`
echo "每次向设备发起的I/O请求平均时间:"$disk_sda_await>>$fileName
 
# 向设备发起的I/O服务时间均值
disk_sda_svctm=`iostat -kx | grep vda| awk '{print $11}'`
echo "向设备发起的I/O服务时间均值:"$disk_sda_svctm>>$fileName
 
# 向设备发起I/O请求的CPU时间百分占比
disk_sda_util=`iostat -kx | grep vda| awk '{print $12}'`
echo "向设备发起I/O请求的CPU时间百分占比:"$disk_sda_util>>$fileName

#6、获取磁盘I/O统计信息
echo "指定设备(/dev/vdb)的统计信息">>$fileName
# 每秒向设备发起的读请求次数
disk_sda_rs=`iostat -kx | grep vdb| awk '{print $4}'`
echo "每秒向设备发起的读请求次数:"$disk_sda_rs>>$fileName
 
# 每秒向设备发起的写请求次数
disk_sda_ws=`iostat -kx | grep vdb| awk '{print $5}'`
echo "每秒向设备发起的写请求次数:"$disk_sda_ws>>$fileName
 
# 向设备发起的I/O请求队列长度平均值
disk_sda_avgqu_sz=`iostat -kx | grep vdb| awk '{print $9}'`
echo "向设备发起的I/O请求队列长度平均值"$disk_sda_avgqu_sz>>$fileName
 
# 每次向设备发起的I/O请求平均时间
disk_sda_await=`iostat -kx | grep vdb| awk '{print $10}'`
echo "每次向设备发起的I/O请求平均时间:"$disk_sda_await>>$fileName
 
# 向设备发起的I/O服务时间均值
disk_sda_svctm=`iostat -kx | grep vdb| awk '{print $11}'`
echo "向设备发起的I/O服务时间均值:"$disk_sda_svctm>>$fileName
 
# 向设备发起I/O请求的CPU时间百分占比
disk_sda_util=`iostat -kx | grep vdb| awk '{print $12}'`
echo "向设备发起I/O请求的CPU时间百分占比:"$disk_sda_util>>$fileName
echo "获取主机信息时间 :"`date +'%Y年%m月%d日 %H:%M:%S'`>>$fileName
mv $fileName /root/shell/logs

echo $fileName | mail -s "云服务器运行信息" -a /root/shell/logs/cpu_mem${ztday}.log  电子邮箱

**没用循环,写的死方法将输出信息追加到 f i l e N a m e 文件 ∗ ∗ 定义变量区分每个时间段的文件名 z t d a y = ‘ d a t e + f i l e N a m e = " c p u m e m fileName文件** 定义变量区分每个时间段的文件名 ztday=`date +%Y%m%d%H%M` fileName="cpu_mem fileName文件定义变量区分每个时间段的文件名ztday=date+fileName="cpumem{ztday}.log"

mail配置

cat /etc/mail.rc 
set from="vmtest@163.com"                             		    #此处设置发件人的信息
set smtp="smtp.163.com"                                     	#此处配置为smtp. 163 .com
set smtp-auth-user= "vmtest@163.com"            				#此处配置发件人邮箱地址
set smtp-auth-password="ABHFHRCEWHYDKJDI"						#客户端授权码,不是邮箱地址密码!!!!!!
set smtp-auth="login"											#邮件认证方式

客户端授权码进入邮箱网页版,设置–POP3,SMTP里面获取

shell最后一行就是mail发送格式之一,多个收件箱用逗号隔开!

crontab定时执行脚本

[root@vmtest shell]# crontab -l
* */2 * * * sh /root/shell/cpu_mem_mon.sh 1 > /root/shell/logs/cpu_mem_mon.log 

脚本执行结果
在这里插入图片描述

脚本文件生成后就mail发出来
在这里插入图片描述
日志文件部分内容
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值