linux 进程 心跳脚本,监控linux服务器性能的shell脚本

#!/bin/bash

#监控系统状态,建议每分钟执行一次,一天一个文件,监控以下信息

#登陆用户、平均负载、占用内存,CPU,SWAP百分比、磁盘写入状态、网络流量与硬盘空间

#每5分钟检测一次,发现异常,写入邮件告警 www.jquerycn.cn

#需要安装包sysstat-9.0.5.tar.gz、ifstat-1.1.tar.gz

#20091210:更改配置文件方式,便于维护

#for pengl 20091116

#for wanggy 20130608 去掉邮件告警,可配置模块监控

#for wanggy 20130816 增加程序事件处理

#============================================================

InvalidDatetime=`date -d "+6 hours" "+%Y-%m-%d %H:%M:%S"`

curr_date=`date "+%Y-%m-%d %H:%M:%S"`

echo $curr_date

#============================================================

readcfg()

{

cat /home/oracle/monitor/cfg/monitor.cfg|sed -e '/^;/d;/^$/d'|awk -F= '$1=="'$1'" {print $2}'

}

run_env()

{

#通过readcfg函数 读取monitor.cfg 相应的配置值

HomeDir="`readcfg HomeDir`"

WorkDir="$HomeDir/bin"

LogDir="$HomeDir/log"

PoleCpu=`readcfg PoleCpu`

PoleMem=`readcfg PoleMem`

PoleLad=`readcfg PoleLad`

PoleIde=`readcfg PoleIde`

PoleHOI=`readcfg PoleHOI`

EXE="`readcfg EXE`"

TELNO="`readcfg TELNO`"

#取系统相应的变量值

cd $WorkDir

echo $WorkDir

DATE=$(date +%Y%m%d)

TIME=$(date +"%H:%M:%S")

IP=$(/sbin/ifconfig eth0|sed -n "2p"|awk -F "[ ]+|:" '{print $4}')

USER=$(/usr/bin/who|awk '{print $1}'|xargs)

LOAD=$(uptime|awk -F"load average:" '{print $2}'|awk -F, '{print $3}'|sed 's/ *//')

Memtotal=$(free |sed -n "2p"|awk '{print $2}')

Memuser=$(free |sed -n "3p"|awk '{print $3}')

MEM=$(awk 'BEGIN {x='$Memuser';y='$Memtotal';printf "%.2f\n",(x/y)*100}')

Swaptotal=$(free |sed -n "4p"|awk '{print $2}')

Swapuser=$(free |sed -n "4p"|awk '{print $3}')

SWAP=$(awk 'BEGIN {x='$Swapuser';y='$Swaptotal';printf "%.2f\n",(x/y)*100}')

Cpud=$(/usr/local/bin/iostat -c 1 2|awk 'NR==7 {print $6}')

CPUD=$(awk 'BEGIN {i='$Cpud';printf "%.2f\n",100-i}')

IOSTATE=`/usr/local/bin/iostat -x 1 1|awk '{if ($1 ~/^sd/) print $1,$2"%"}'|xargs`

DISK=$(df|sed -e '1d;s/\/dev\///g'|awk '{printf "%s:%s\n",$1,$5}'|xargs)

OUTFILE=$LogDir/capstats$DATE.log

#将相关信息保存至OUTFILE中

echo ">>>>[$IP] $TIME

用户:$USER

负载:$LOAD

使用内存:$MEM%

使用Swap:$SWAP%

使用 CPU:$CPUD%

硬盘IO:$IOSTATE

硬盘空间:$DISK

-----------------------<<<> $OUTFILE

}

#检测CPU

TEST_CPU()

{

CpuTest=$(echo "$CPUD>=$PoleCpu"|bc)

if [ $CpuTest -eq 1 ];then

message="当前CPU使用率达$CPUD%,超过指标$PoleCpu%--$curr_date"

echo $message >> $LogDir/errlog

echo $message

SEND_SMS

fi

}

#检测内存

TEST_MEM()

{

MemTest=$(echo "$MEM>=$PoleMem"|bc)

if [ $MemTest -eq 1 ];then

message="当前内存使用率达$MEM%,超过指标$PoleMem%--$curr_date"

echo $message >> $LogDir/errlog

echo $message

SEND_SMS

fi

}

#检测负载

TEST_LOAD()

{

LadTest=$(echo "$LOAD>=$PoleLad"|bc)

if [ $LadTest -eq 1 ];then

message="15分钟平均负载为$LOAD,超过指标$PoleLad--$curr_date"

echo $message >> $LogDir/errlog

echo $message

SEND_SMS

fi

}

#检测硬盘空间

TEST_DISK()

{

DiskUse=$(df|sed -e '1d;s/%//g'|awk '{print $5}'|xargs)

for Dfree in $DiskUse ; do

if [ "$Dfree" -ge "$PoleIde" ];then

message="硬盘使用空间超过指标$PoleIde%--$curr_date"

echo $message >> $LogDir/errlog

echo $message

SEND_SMS

break

fi

done

}

#检测硬盘IO状态

TEST_IO()

{

DiskUseIO=`/usr/local/bin/iostat -x 1 1|awk '{if ($1 ~/^sd/) print $2}'`

for DiskIO in $DiskUseIO ; do

echo $DiskIO

DiskIoTest=$(echo "$DiskIO>=$PoleHOI"|bc)

echo $message >> $LogDir/errlog

echo $message

SEND_SMS

break

fi

done

}

#检查程序状态

TEST_EXE()

{

for exe in $EXE ; do

echo "开始检测$exe进程"

exetest=$(ps -ef|grep $exe|grep -v grep|awk '{print$NF}')

#echo $exetest

echo "$exetest 进程当前心跳正常$curr_date" >>$LogDir/oracle.log

if [ -z "$exetest" ] ; then

message="$exe进程不存在!--$curr_date"

echo $message >> $LogDir/errlog

echo $message

SEND_SMS

#重启oracle

sleep 3

sh /home/oracle/startdb.sh

sleep 60

#TEST_EXE

fi

done

}

SEND_SMS()

{

message1="24服务器告警:"

Message2=$message1$message

echo $message2

for Tel in $TELNO ; do

mysql -h10.116.21.27 -uinfosms -pinfosms -Dinfosms <

INSERT INTO smssend02

(ServerCode,SmsServerCode,GroupID,PRIORITY,Calling,Called,Payer,OrderDatetime,

SendDatetime,EffectStartTime,effectendtime,InvalidDatetime,FeeValue,ifFee,Message,

hideflag,MsgType,SmsFeeType,IfsmsReport,ServiceType,MorelatetoMTFlag,Reserve,

optempid,optuserid,clientProgramtype,optcode,OPTIP,remark)

VALUES

(2,1,NULL,1,'106558****','$Tel','$Tel',Now(),Now(),'00:00:00','23:59:59','$InvalidDatetime',0,1,'$Message2',NULL,0,1,0,'MYJQF',0,NULL,900005,NULL,5,NULL,'75228999',NULL);

AgentSms

done

}

main()

{

echo "主程序"

run_env

TEST_CPU

TEST_MEM

TEST_LOAD

TEST_DISK

TEST_IO

TEST_EXE

}

main

exit 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值