Linux shell 脚本监控cpu,内存,硬盘,网络,是否存活

写脚本的背景:脚本实现简单的监控,而不需要用非常的重的监控软件完成。

脚本如下

#!/bin/sh
# 脚本放入到/usr/local/bin
# chmod 755 check_server.sh
# crontab 中添加
source /etc/bashrc

#------监控阈值
DISK_space_warn=90
CPU_load_warn=5
CPU_use_warn=50
MEM_use_warn=95
#SWAP_use_warn=50
Net_SYN_count_warn=200

#判断参数
if [ $# -ne 2 ]; then
    hint_msg="usage: $0 Monitoring_type,Monitoring_type phone,phone,phone"
    echo $hint_msg
	echo "sh $0 disk,cpu,mem,net,io,alive"
    exit -1 
fi

#------监控项
Monitoring_type_tmp=$1
Monitoring_type=$(echo $Monitoring_type_tmp | sed -e ‘s/,/ /g‘) 

now=`date -u -d"+8 hour" +‘%Y-%m-%d %H:%M:%S‘`

#------机器操作系统
OS_version=‘‘
if  grep -q ‘CentOS release 6‘ /etc/redhat-release ; then
	OS_version=‘CentOS6‘
else 
	OS_version=‘CentOS7‘
fi

#------ip地址
localip=`hostname -I | tr ‘ ‘ ‘\n‘ | grep -E ‘(^10\.|^172\.(1[6-9]|2[0-9]|31)|^192\.168)‘ | head -n 1`

send_warning()
{
	发短信的函数
	发送下面的msg变量
}

#------监控CPU相关信息
function sub_cpu(){
	cpu_num=`grep -c ‘model name‘ /proc/cpuinfo`

	#------cpu 负载 15 minutes
	load_15=`cat /proc/loadavg  | awk ‘{print $2}‘`
	average_load=`echo "scale=2;a=$load_15/$cpu_num;if(length(a)==scale(a)) print 0;print a" | bc`
	average_int=`echo $average_load | cut -f 1 -d "."`
	if [ "${average_int}" -ge "${CPU_load_warn}" ];then
		msg=${HOSTNAME}" "${localip}" System load average of 15 minutes is "${average_load}" more than "${CPU_load_warn} 
		echo "${now} ${msg}"  >> log
		send_warning
	fi

	#------cpu 使用率
	if [ ${OS_version} == ‘CentOS6‘ ];then
		cpu_idle=`top -b -n 1 | grep Cpu | awk ‘{print $5}‘ | cut -f 1 -d "."`
	else
		cpu_idle=`top -b -n 1 | grep Cpu | awk ‘{print $8}‘ | cut -f 1 -d "."`
	fi
	CPU_use=`expr 100 - $cpu_idle`
	if [ "${CPU_use}" -ge "${CPU_use_warn}" ];then
		msg=${HOSTNAME}" "${localip}" CPU utilization is "${CPU_use}"% more than "${CPU_use_warn}"%" 
		echo "${now} ${msg}"  >> log
		send_warning
	fi
}

#------监控内存
function sub_mem(){
	MEM_use=`free | grep "Mem" | awk ‘{printf("%d", $3*100/$2)}‘`

	if [ $MEM_use -ge $MEM_use_warn ];then
		msg=${HOSTNAME}" "${localip}" Mem_used:"${MEM_use}"% more than "${MEM_use_warn}"%"
		echo "${now} ${msg}"  >> log
		send_warning
	fi
	#SWAP有很多环境为0 例如在AWS云,腾讯云上
	#SWAP_use=`free | grep "Swap" | awk ‘{printf("%d", $3*100/$2)}‘`
	#if [ $SWAP_use -ge $SWAP_use_warn ];then
	#
	#	send_warning
	#fi 
}

  
#------监控硬盘空间
function sub_disk(){
	#[注意这里用df -P]
	for DISK_space in `df -P | grep /dev | grep -v -E ‘(tmp|boot)‘ | awk ‘{print $5}‘ | cut -f 1 -d "%" ` 
	do
		if [ $DISK_space -ge "${DISK_space_warn}" ]; then
			msg=${HOSTNAME}" "${localip}" Hard disk space :"${DISK_space}"% more than "${DISK_space_warn}"%"
			echo "${now} ${msg}"  >> log
			send_warning
		fi
	done
}

#------监控网络相关
function sub_net(){

	#------syn 半连接数
	Net_SYN_count=`ss -an | grep -ic syn`
	if [ "${Net_SYN_count}" -ge "${Net_SYN_count_warn}" ]; then
		msg=${HOSTNAME}" "${localip}" Net SYN count :"${Net_SYN_count}" more than "${Net_SYN_count_warn}
		echo "${now} ${msg}"  >> log
		send_warning
	fi
}

#------监控项
for type in $Monitoring_type
do
	[ "${type}" == ‘disk‘ ] && sub_disk
	[ "${type}" == ‘cpu‘ ] && sub_cpu
	[ "${type}" == ‘mem‘ ] && sub_mem
	[ "${type}" == ‘net‘ ] && sub_net
	[ "${type}" == ‘io‘ ] && sub_io
	#[ "${type}" == ‘alive‘ ] && sub_alive
done 

#判断端口是否通 也是判断是否alive的
#!/bin/bash
#Alive=`echo -e "\n" | telnet  192.168.1.30 22 | grep Connected | wc -l`
#if [ "$Alive" == 1 ];then
#        echo "0"    #如果JG等于1,端口为通,输出0
#else 
#        echo "1"    #如果JG等于0,端口不通,输出1
#fi

进行测试

时间: 2024-12-06 10:29:23

Linux shell 脚本监控cpu,内存,硬盘,网络,是否存活的相关文章

linux shell脚本监控进程是否存在

用shell脚本监控进程是否存在 不存在则启动的实例,先上代码干货:    #!/bin/shps -fe|grep processString |grep -v grepif [ $? -ne 0 ]thenecho "start process....."elseecho "runing....."fi #####processString 表示进程特征字符串,能够查询到唯一进程的特征字符串0表示存在的$? -ne 0 不存在,$? -eq 0 存在 定时执行:

Shell脚本监控CPU、内存和硬盘利用率

1.监控CPU利用率(通过vmstat工具) #!/bin/bash#====================================================# Author: lizhenliang - EMail:[email protected]# Create Date: 2015-02-01# Description: cpu utilization monitor# blog:lizhenliang.blog.51cto.com#===================

【sehll学习】linux运维一个简单shell脚本监控系统内存

学习shell脚本入门后,慢慢要尝试编写一些脚本练练手,在这先简单的学习写个系统内存的监控. 1.首先先要确定一下截取一下需要关注的内存使用值,可使用free 命令来操作 free -m 显示 一般在监控内存是我们都是截取 第三行(-/+ buffers/cache)的值.确定后可以使用管道线和grep命令来获取这个的值. free -m | grep - | awk  '{print $4}' 获取到他的值为  858 当中 grep -  就是匹配一下要选取的内容,不太熟悉的可以学习一下gr

centos7.2,shell脚本监控CPU并sendmail自动报警

操作系统:centos 7.2 sendmail 自动报警#完成时间:2018.04.16 #!/bin/bash #CPU 1,5,15###########################################################if [ -e detection_script ]thenmkdir -p /detection_script/fi############################################################dt=

一个统计 CPU 内存 硬盘 使用率的shell脚本

一个统计 CPU 内存 硬盘 使用率的shell脚本,供大家学习参考 #!/bin/bash #This script is use for describle CPU Hard Memery Utilization total=0 idle=0 system=0 user=0 nice=0 mem=0 vmexec=/usr/bin/vmstat which sar > /dev/null 2>&1 if [ $? -ne 0 ] then ver=`vmstat -V | awk

用shell脚本监控linux系统 自动发送邮件

此脚本可以做一个定时的检测,超出设定的值,即往邮箱发送警告 脚本用到bc,sendmail,163邮箱, yum install bc #!/bin/bash #System Monitoring Script while [ 1 ] do #本机需开启postfix或sendmail服务. #报警邮件地址设置 [email protected] [email protected] #设置脚本运行间隔时间.单位(秒). RUNTIME=900 #内存使用率监控设置,单位 (%) MEMTHRE=

Linux 查看机器配置,及cpu/内存/硬盘使用率

Linux下怎样查看机器配置啊?cpu/内存/硬盘 dmesg显示开机信息.kernel会将开机信息存储在ring buffer中.您若是开机时来不及查看信息,可利用dmesg来查看.开机信息亦保存在/var/log目录中,名称为dmesg的文件里 dmesg|grep hd硬盘dmesg|grep cpucpudmesg|grep proc内存dmesg|grep redhat操作系统dmesg|more更多信息uname -a操作系统版本 查看linux cpu和内存利用率2008-07-1

Linux下shell脚本监控Tomcat的状态并实现自动启动

最近公司需要在Linux下监控tomcat的服务,一旦tomcat服务存在异常或者宕机,重启tomcat保证服务的正常运行,由于Linux下有Shell脚本可以实现此效果,下面是Linux下shell脚本监控Tomcat的状态并实现自动启动的步骤. 1.编写Shell脚本monitor.sh #!/bin/sh # func:自动监控tomcat脚本并且执行重启操作# author:EagleHao# date:2018-04-08# DEFINE # 获取tomcat进程ID(其中[grep

Linux shell脚本判断服务器网络是否可以上网

Linux shell脚本判断网络畅通 介绍 在编写shell脚本时,有的功能需要确保服务器网络是可以上网才可以往下执行,那么此时就需要有个函数来判断服务器网络状态 我们可以通过curl来访问 www.baidu.com,从而判断服务器网络状态是否可以畅通的 网络状态判断 #!/bin/bash #检测网络链接畅通 function network() { #超时时间 local timeout=1 #目标网站 local target=www.baidu.com #获取响应状态码 local