#! /bin/bash
#ver 1.0
#By swztdza-2020.12.30
#适用于centos、redhat6版本
netcard="eth5"
#修改此项为实际使用网卡地址,使用ifconfig查看
s=1
netdisk1=$(ifconfig eth5 | grep 'RX bytes' | awk '{print $2}' | sed s/bytes://)
#获取网络流量总量-上传
netdisk2=$(ifconfig eth5 | grep 'TX bytes' | awk '{print $6}' | sed s/bytes://)
#获取网络流量总量-下载
ptime=0 #程序时间,用于使用程序初始化
while [ $s -ge 0 ] #死循环
do
#echo $ptime
#sz13=$(top -n 1 | sed -n '8p' | awk '{print $(NF-4)}')
#sz13=$(#获取最高的cpu数
#sz13=$(
#sz13=$(sz14=$(top -n 1 | sed -n '8p' | awk '{print $13}')
#sz13=$(#获取当前消耗cpu最高的进程
if [ $ptime -gt 0 ];then #检测是否为程序初始化状态
echo "----------------服务器状态监测,每 1 秒检测一次 ctrl+c可以退出程序----------------"
date +"%Y-%m-%d %T %A"
echo -e "\e[43m----------------cpu status----------------\e[0m"
pd1=$(uptime | awk '{print $6}')
if [ $pd1 == "min," ];then
#echo -e "\e[1;34m分别为1分钟,5分钟,15分钟cpu负载:\e[0m" $(uptime | awk '{print ($11,$12,$13)}') "\e[1;32m ● \e[0m"
#新设定监控值为3
sz4=$(echo $(uptime | awk '{print $11}')| sed s/,// | awk '{if($0 < 3)
#使用awk工具判断浮点数,并赋值给sz4
print "0"
else
{ print "1" } }')
if [ $sz4 == "0" ];then
echo -e "\e[1;34m分别为1分钟,5分钟,15分钟cpu负载:\e[0m" $(uptime | awk '{print $(NF-2),$(NF-1),$(NF)}') "\e[1;32m ● \e[0m"
echo '负载正常'
#echo "min" #调试行
else
sz13=$(top -n 1 | sed -n '8p' | awk '{print $(NF-4)}')
#获取最高的cpu数
sz14=$(top -n 1 | sed -n '8p' | awk '{print $(NF-1)}')
#获取当前消耗cpu最高的进程
echo -e "\e[1;34m分别为1分钟,5分钟,15分钟cpu负载:\e[0m" $(uptime | awk '{print $(NF-2),$(NF-1),$(NF)}') "\e[1;5;31m ● \e[0m"
echo -e "当前单个进程cpu损耗最高百分比:" $sz13 "进程名:" $sz14
echo -e '\e[1;31m当前负载过高警告!当前负载过高警告\e[0m'
fi
sz5=$(whoami)
#获取当前登陆用户用户名
sz6=$(who | grep $sz5 | sed -n '1p' | awk '{print $5}' | sed 's/(//' | sed 's/)//')
#获取当前登陆用户ip
if [ -z $sz6 ];then
echo -e "\e[1;34m登陆用户数:\e[0m"$(uptime | awk '{print ($7)}') "\e[1;34m当前登陆用户:\e[0m"$sz5 "\e[1;34mIP address:\e[0m" "su 用户无法获取"
else
if [[ $2 == '1' ]];then
sz11=$(curl -s http://ip.tool.chinaz.com/$sz6 | grep "w50-0" | sed -n '2p' | awk '{print $3,$4}' | sed 's/w50-0">//' | sed 's/<\/span>//')
#获取当前登陆用户ip现实地址,外网接口http://ip.tool.chinaz.com/【IP地址】,如程序变慢,请尝试注释此行配置再次运行。
#添加第二个位置参数,为1时才执行ip地址解析!!
fi
echo -e "\e[1;34m登陆用户数:\e[0m"$(uptime | awk '{print ($7)}') "\e[1;34m当前登陆用户:\e[0m"$sz5 "\e[1;34mIP address:\e[0m"$sz6 $sz11
fi
echo -e "\e[1;34m服务器已运行 \e[0m" $(uptime | awk '{print ($3)}') "\e[1;34m天\e[0m"
echo -e "\e[0m"
else
#echo -e "\e[1;34m分别为1分钟,5分钟,15分钟cpu负载:\e[0m" $(uptime | awk '{print ($10,$11,$12)}') "\e[1;32m ● \e[0m"
sz1=$(echo $(uptime | awk '{print $10}')| sed s/,// | awk '{if($0 < 3)
#使用awk工具判断浮点数,并赋值给sz1
print "0"
else
{ print "1" } }')
if [ $sz1 == "0" ];then
echo -e "\e[1;34m分别为1分钟,5分钟,15分钟cpu负载:\e[0m" $(uptime | awk '{print $(NF-2),$(NF-1),$(NF)}') "\e[1;32m ● \e[0m"
#echo -e "当前单个进程cpu损耗最高百分比:" $sz13 "进程名:" $sz14
echo '负载正常'
#echo "no min" #调试行
else
sz15=$(top -n 1 | sed -n '8p' | awk '{print $(NF-4)}')
#获取最高的cpu数
sz16=$(top -n 1 | sed -n '8p' | awk '{print $(NF-1)}')
#获取当前消耗cpu最高的进程
echo -e "\e[1;34m分别为1分钟,5分钟,15分钟cpu负载:\e[0m" $(uptime | awk '{print $(NF-2),$(NF-1),$(NF)}') "\e[1;5;31m ● \e[0m"
echo -e "当前单个进程cpu损耗最高百分比:" $sz15 "进程名:" $sz16
echo -e '\e[1;31m当前负载过高警告!当前负载过高警告!\e[0m'
fi
sz9=$(whoami)
#获取当前登陆用户用户名
sz10=$(who | grep $sz9 | sed -n '1p' | awk '{print $5}' | sed 's/(//' | sed 's/)//')
#获取当前登陆用户ip
if [ -z $sz10 ];then
echo -e "\e[1;34m登陆用户数:\e[0m"$(uptime | awk '{print ($6)}') "\e[1;34m当前登陆用户:\e[0m"$sz9 "\e[1;34mIP address:\e[0m" "su 用户无法获取"
else
if [[ $2 == '1' ]];then
sz12=$(curl -s http://ip.tool.chinaz.com/$sz10 | grep "w50-0" | sed -n '2p' | awk '{print $3,$4}' | sed 's/w50-0">//' | sed 's/<\/span>//')
#获取当前登陆用户ip现实地址,外网接口http://ip.tool.chinaz.com/【IP地址】,如程序变慢,请尝试注释此行配置再次运行。
#添加第二个位置参数,为1时才执行ip地址解析!!
fi
echo -e "\e[1;34m登陆用户数:\e[0m"$(uptime | awk '{print ($6)}') "\e[1;34m当前登陆用户:\e[0m"$sz9 "\e[1;34mIP address:\e[0m"$sz10 $sz12
fi
#echo -e "\e[1;34m登陆用户数:\e[0m" $(uptime | awk '{print ($6)}')
echo -e "\e[1;34m服务器已运行 \e[0m" $(uptime | awk '{print ($3)}') "\e[1;34m天\e[0m"
echo -e "\e[0m"
fi
echo -e "\e[43m----------------disk status----------------\e[0m"
#df -h | sed -n "1,2p"
df -h
echo -e "\e[43m----------------MEM status----------------\e[0m"
free -m
echo -e "\e[43m----------------Net status----------------\e[0m"
#ifconfig eth0 | grep bytes
if [ $c -gt 3000 ];then
c2=$(echo -e "\e[1;31m下载负载超限,已生成警告日志文件:/root/LTlog/warning.txt\e[0m")
elif [ $c -gt 1600 ];then
c2=$(echo -e "\e[1;34m下载负载过高\e[0m")
elif [ $c -lt 1600 ];then
c2=$(echo "下载负载正常")
fi 2> /dev/null
if [ $c1 -gt 200 ];then
c3=$(echo -e "\e[1;31m上传负载超限,已生成警告日志文件:/root/LTlog/warning.txt\e[0m")
elif [ $c1 -gt 160 ];then
c3=$(echo -e "\e[1;34m上传负载过高\e[0m")
elif [ $c1 -lt 160 ];then
c3=$(echo "上传负载正常")
fi 2> /dev/null
#网络模块初始化段,删除会出现赋值前字符异常
if [ $ptime -lt 2 ];then
bl1=0
bl2=0
c="null"
C="null"
c1="null"
C1="null"
D1="null"
D3="null"
D2="null"
D4="null"
echo "网络模块初始化中。。。"
fi
echo "下载实时流量:" $c " kb/s" "下载实时数据包:" $C " 个" $c2 2> /dev/null
echo "上传实时流量:" $c1 " kb/s" "上传实时数据包:" $C1 " 个" $c3 2> /dev/null
if [ $bl1 -gt 0 ];then
echo "程序运行至现在的下载流量总量:" $D1 "KB" $D3 "MB" 2> /dev/null
else
echo "程序运行至现在的下载流量总量:" $D1 "KB" 2> /dev/null
fi
if [ $bl2 -gt 0 ];then
echo "程序运行至现在的上传流量总量:" $D2 "KB" $D4 "MB" 2> /dev/null
else
echo "程序运行至现在的上传流量总量:" $D2 "KB" 2> /dev/null
fi
A=$(ifconfig $netcard | grep 'RX pack' | awk '{print $2}' | sed s/packets://)
a=$(ifconfig $netcard | grep 'RX bytes' | awk '{print $2}'| sed s/bytes://)
A1=$(ifconfig $netcard | grep 'TX pack' | awk '{print $2}' | sed s/packets://)
a1=$(ifconfig $netcard | grep 'TX bytes' | awk '{print $6}' | sed s/bytes://)
#将网络实时流量放在最后是因为需要计时的原因,方便查看!
#获取前一秒的总上传下载数据包和字节数
#此段以下为程序的下半段
sleep 1
ptime=$((ptime+1))
#netcard="eth5"
B=$(ifconfig $netcard | grep 'RX pack' | awk '{print $2}' | sed s/packets://)
b=$(ifconfig $netcard | grep 'RX bytes' | awk '{print $2}'| sed s/bytes://)
B1=$(ifconfig $netcard | grep 'TX pack' | awk '{print $2}' | sed s/packets://)
b1=$(ifconfig $netcard | grep 'TX bytes' | awk '{print $6}' | sed s/bytes://)
#获取下一秒的总上传下载数据包和字节数
c=$(((b-a)/1024)) #下一秒的字节数与上一秒的字节数相减,获得当前网络流量(kb/s)
c1=$(((b1-a1)/1024)) #下一秒的字节数与上一秒的字节数相减,获得当前网络流量(kb/s)
#上传和下载网络即时流量获取
C=$((B-A)) #下一秒的数据包和上一秒的数据包相减,获得当前数据包数量
C1=$((B1-A1)) #下一秒的数据包和上一秒的数据包相减,获得当前数据包数量
#上传和下载网络即时数据包获取
bl1=0
bl2=0
D1=$(((b-netdisk1)/1024))
if [ $D1 -gt 1024 ];then
bl1=1
D3=$((D1/1024))
fi
#统计程序开始时网络流量总量-下载
D2=$(((b1-netdisk2)/1024))
if [ $D2 -gt 1024 ];then
bl2=1
D4=$((D2/1024))
fi
#统计程序开始时网络流量总量-上传
else #程序初始化状态的if循环段落的else语句
clear
echo "程序初始化中。。。"
#pd3=$(pstree -ps | grep LTlogserver)
#检测进程中是否存在LTlogserver进程并赋值给pd1
#if [ -z "${pd3}" ];then #判断pd3变量中是否存在字符(没有进程则不会有字符)
##注意判断时,如果是字符串类型要用引号引起来,不然会报错
# echo -e '程序初始化中。。。。'
# ptime3=1
#
#else
# sz7=$(pstree -ps | grep LTlogserver | sed -n "1p" | awk -F -LTlogserver.sh '{print $2}' | sed 's/(//' | sed 's/).*$//')
# echo -e '程序初始化中。。。。'
# ptime3=1
#fi
#pd4=$(systemctl status httpd > /dev/null && echo $?)
##检测服务中是否存在httpd服务并赋值给pd2
#if [ -z "${pd4}" ];then #判断pd2变量中是否不等于0(服务有启动则为0)
# echo -e '程序初始化中。。。。。'
# ptime4=1
#else
# sz8=$(systemctl status httpd | grep Main | awk '{print $3}')
# echo -e '程序初始化中。。。。。'
# ptime4=1
#
#fi
# if [ $ptime4 -gt 0 ];then
# ptime=1
# else
# exit
# fi
#ptime变量为程序初始值变量,不能删除,否则会执行错误
ptime=1
clear
fi #程序初始化状态的if循环段落的结束语句
#clear
#done
#fi
# a=$(ifconfig eth1 | grep 'RX pack' | awk '{print $5}')
# A=$(ifconfig eth0 | grep 'RX pack' | awk '{print $3}')
# a1=$(ifconfig eth0 | grep 'TX pack' | awk '{print $5}')
# A1=$(ifconfig eth0 | grep 'TX pack' | awk '{print $3}')
# #将网络实时流量放在最后是因为需要计时的原因,方便查看!
#
# sleep $1
#
# b=$(ifconfig eth0 | grep 'RX pack' | awk '{print $5}')
# B=$(ifconfig eth0 | grep 'RX pack' | awk '{print $3}')
# b1=$(ifconfig eth0 | grep 'TX pack' | awk '{print $5}')
# B1=$(ifconfig eth0 | grep 'TX pack' | awk '{print $3}')
#
# c=$(((b-a)/1000))
# c1=$(((b1-a1)/1000))
#
# C=$((B-A))
# C1=$((B1-A1))
clear
done
|