检测os的脚本
目的:学了shell语言后,根据已学编写一个shell的脚本实现检测部分系统参数实现邮件告警,
(之前刚刚学习写的不怎么完善和实用!)
[root@cml scripts]# cat os.monitor.sh
#!/bin/bash
###########
#name=linux查看系统资源脚本
#auth=cml
#time:2015
###########
DATE=`date "+%F %H:%M:%S"`
HOST=`hostname`
###########
echo "check:$DATE"
check_yum(){
yum install -y sysstat
yum install -y iftop
yum install -y lsof
}
check_mail(){
rpm -qa | grep mailx-12.4-8.el6_6.x86_64
mail=`echo $?`
if [ $mail -eq 0 ]; then
echo "mail is installed"
else
yum install -y mailx
fi
service postfix status
mail=`echo $?`
if [ $mail -eq 0 ]; then
echo "postfix is running!"
else
echo "postfix not running"
service postfix start
echo "postfix successfully runnig"
fi
echo -e "\033[32m=========check_mail is ok========\033[0m"
##只是为了好看分隔
}
check_sys(){
# echo "检查主机名,系统参数!"
echo -n "HOSTNAME:"
echo $HOST
echo -n "系统版本:"
cat /etc/issue
echo -n "系统的参数:"
cat /proc/version
echo -e "\033[32m=========check_sys is ok========\033[0m"
}
check_cpu(){
# echo "检查cpu,LOAD,WA,IDEL情况!"
echo -n "cpu内核:"
cpu=`cat /proc/cpuinfo | grep processor | wc -l`
echo $cpu
echo -n "load:"
load1=`w | awk 'NR==1 {print $10}' | awk -F '.' '{print $1}'`
load2=w | awk 'NR==1 {print $10}'
echo $load2
if [ $load1 -lt $cpu ]; then
echo "send_mail to ********@qq.com"
echo "your cpu is normal! cpu=$cpu load balance=$load2 time:$DATE" | mail -s "check your cpu" ********@qq.com
else
echo "your load<cpu load=$load cpu=$cpu $DATE"
fi
echo -e "\033[32m=========check_cpu is ok========\033[0m"
}
check_mem(){
# echo "检查内存使用情况!"
free=`free -m | awk 'NR==2 {print $4}'`
cache=`free -m | awk 'NR==2 {print $7}'`
echo -n "内存使用情况:"
mem=`echo $[free+cache]`
echo $mem
if [ $mem -lt 1000 ]; then
echo "send_mail to ********@qq.com"
echo "your mem is normal time:$DATE" | mail -s "check your mem " ********@qq.com
else
echo "your mem:$mem>1000 is abnormality time:$DATE"
fi
echo -e "\033[32m=========check_mem is ok========\033[0m"
}
check_network(){
# echo "检查网卡eth0的流量!"
# iftop -t >> /tmp/network
echo -n "接收端流量:"
# cat /tmp/network | grep send | awk 'NR==1 {print $4}'
ifconfig eth0 | awk 'NR==8 {print $3}' | awk -F '(' '{print $2}'
echo -n "发送端流量:"
# cat /tmp/network | grep receive | awk 'NR==1 {print $4}'
ifconfig eth0 | awk 'NR==8 {print $7}' | awk -F '(' '{print $2}'
echo -e "\033[32m=========check_network is ok========\033[0m"
}
check_TCP(){
# echo "检查TCP连接状态!"
echo -n "TCP连接状态:"
netstat -an | awk '/^tcp/{a[$NF]++}END{for (i in a)print i,a[i]}'
listen=`netstat -an | awk '/^tcp/{a[$NF]++}END{for (i in a)print i,a[i]}' | awk 'NR==2 {print $2}'`
if [ $listen -gt 7 ]; then
echo "send_mail to ********@qq.com "
echo "your connection is normal! time:$DATE" | mail -s "check your TCP " ********@qq.com
else
echo "your now-listen>Normal-listen now-listen=$listen $DATE"
fi
echo -e "\033[32m=========check_TCP is ok========\033[0m"
}
check_DISK(){
# echo "检查磁盘的使用情况!"
echo "/分区的使用百分比:"
root=`df -h | awk 'NR==3{print $4}' | awk -F "%" '{print $1}'`
echo $root
echo "INNODE使用百分比:"
df -i | awk 'NR==3 {print $4}'
if [ $root -lt 80 ]; then
echo "send_mail to ********@qq.com"
echo "your disk:/ is normal! time:$DATE " | mail -s "check your DISK" ********@qq.com
else
echo "your disk:/ greater than 80% /:$root time:$DATE"
fi
echo -e "\033[32m=========check_DISK is ok========\033[0m"
}
monitor2(){
check_sys
check_cpu
check_mem
check_network
check_TCP
check_DISK
}
monitor2 >> /tmp/$(hostname).txt