文章目录

  • 脚本简介
  • 脚本注解
  • 修改脚本
  • 执行方式
  • 执行结果
  • 前台显示
  • 后台显示
  • 脚本内容


脚本简介

  1. 基于运维统一脚本中,10、检测服务脚本下的实时监控磁盘、内存信息(每分钟)选项
  2. 使用yum安装(yum仓库),系统版本Centos7

脚本注解

  1. 该脚本为了在Centos7服务器实时监控磁盘、内存信息(每分钟)
  2. 脚本分为两个文件
  • 第一个为监控脚本,用于监控服务器相关信息(script_monitoring)
  • 第二个为启动脚本,可以选择启动方式,前台启动,会占用一个终端,实时打印磁盘及内容信息,可自由补充(Run.sh)

修改脚本

vim Run.sh
basepath=$(cd `dirname $0`;pwd)
script_monitoring_dir_base="${basepath}/script_monitoring.sh"
log_dir_name="log"
#根据实际情况复制后,修改脚本名称,如果脚本名称保持一致则可以不用更改

执行方式

sh Run.sh run
#根据屏幕上打印的提示选择即可
执行结果
前台显示

android shell 监控进程 shell实时监控日志_服务器

后台显示

android shell 监控进程 shell实时监控日志_运维_02

脚本内容

#!/bin/bash
#所有者:北城半夏
#
#当前版本
#v1.0.1
# 实时监控本机内存和硬盘剩余空间,剩余内存
basepath=$(cd `dirname $0`;pwd)
log_dir_name="${basepath}/log"
script_monitoring_dir_base="${basepath}/script_monitoring.sh"
DKINODE_LOG=${log_dir_name}/disk_inode.log

#################################################
info(){
  echo -e "\033[35m 【`hostname` `date '+%Y-%m-%d %H:%M:%S'`】\033[0m" "\033[36m$1\033[0m "
}
info3(){
 echo -e "\033[36m------------------------------------------------------------------------------\033[0m" 
}
info6(){
  echo -e "\033[33m 【`hostname` `date '+%Y-%m-%d %H:%M:%S'`】\033[0m" "\033[91m$1\033[0m "
}
info7(){
  echo -e "\033[34m 【`hostname` `date '+%Y-%m-%d %H:%M:%S'`】\033[0m" "\033[36m$1\033[0m "
}
info8(){
  echo -e "\033[91m 【`hostname` `date '+%Y-%m-%d %H:%M:%S'`】\033[0m" "\033[91m$1\033[0m "
}
info9(){
  echo -e "\033[32m 【`hostname` `date '+%Y-%m-%d %H:%M:%S'`】\033[0m" "\033[36m$1\033[0m "
}
#################################################
mem_use_fy() {
  local MEM_TOTAL=`free -m | awk '{if(NR==2){printf "%.1f",$2/1024;print "G"}}'`        #%.1f表示取小数点1位
  local MEM_USED=`free -m | awk '{if(NR==2){printf "%.1f",$3/1024}} END{print "G"}'`
  local MEM_FREE=`free -m | awk '{if(NR==2){printf "%.1f",$4/1024;print "G"}}'`
  local MEM_CACHE=`free -m | awk '{if(NR==2){printf "%.1f",$6/1024;print "G"}}'`
  info3
     info9 "内存总容量: ${MEM_TOTAL}"
     info9 "内存已用量: ${MEM_USED}"
     info9 "内存剩余量: ${MEM_FREE}"
     info9 "内存缓存量: ${MEM_CACHE}"
    MEM_FREE_INT=`free -m | awk '{if(NR==2){printf "%d",$4/1024}}'`
     if [ $MEM_FREE_INT -le 0 ];then
          echo -en  "${YELLOW_COLOR}如果我们需要清除缓存,mree内存非常低[y|n]: ${BLACK_COLOR}" 
          read -p "" action
          case $action in
             y|Y)
                  sync
                  echo 3 > /proc/sys/vm/drop_caches
                  info8 "clear mem  ok..."  ;;
                n|N)
                  run_continue ;;
                esac
        fi
}

disk_inode_fy(){
  #磁盘inodes
  echo ""
  DISK_INODE=`df -i | awk '/^\/dev/{print int($5)}'`              #df -i表示打印inode节点值
  [ -d ${bashpath}/log} ] ||mkdir -p  ${bashpath}/log
  for i in $DISK_INODE
     do
       if [ $i -ge 50 ];then
           DISK_INODE_NAME=`df -i | awk '{if(int($5)=='''$i'''){print $1}}'`
           echo "$DISK_INODE_NAME inodes is ${i}%" > $DKINODE_LOG
       fi
    done
  if [ -e $DKINODE_LOG ];then
      info3
      info7 "磁盘inodes user:\n`df -i | awk '/^\/dev/{print $1": "$5}'|column -t`"
      info3
   else
      info3
      info7 "磁盘inodes user:\n`df -i | awk '/^\/dev/{print $1": "$5}'|column -t`"
      info3
      info6 "Disk inodes no more than 50%..."
  fi
}
#磁盘使用率
disk_use_fy(){
  DISK_LOG=${bashpath}/log/disk_user.log          #磁盘使用日志存放路径
  DISK_TOTAL=`fdisk -l | awk '/^Disk.*bytes/{print $2,int($3)"GB"}'|column -t`    #打印出磁盘对应的大小
  DISK_USED=`df -h | awk '/^\/dev/{print int($(NF-1))}'`          #打印出磁盘的使用率
  disk_user=`df -h | awk '/^\/dev/{print $1":",$5}'|column -t`    #如果使用了df -hT则先是$7,$6
  [ -d ${bashpath}/log} ] ||mkdir -p  ${bashpath}/log
   echo ""
  for i in $DISK_USED                     #遍历一下,因为不止一块磁盘
    do
      if [ $i -ge 80 ];then
         DISK_NAME=`df -h | awk '{if(int($5)=='''$i'''){print $6}}'`             #如果第五列磁盘使用率等于循环中i的值那么就打印第六列
         echo "${DISK_NAME} used is ${i}%..."  &> $DISK_LOG              #将磁盘的名字和使用率对应起来追加到日志中
      fi
   done
  info7  "disk total: \n${DISK_TOTAL}"
    if [ -e $DISK_LOG ];then
        if [ `cat $DISK_LOG |wc -l` -ne 0 ];then
             info3
             info7 "disk user: \n$disk_user"                     #如果使用了df -hT则先是$7,$6 
             info3
        else
             info3
             info2 "$DISK_LOG 空文件,请检查配置后重试!!!"                                #如果使用了df -hT则先是$7,$6
        fi
    else
        info3
        info7 "disk user: \n$disk_user"                         #如果使用了df -hT则先是$7,$6
        info6  "Disk used no more than 80%..."          #当前磁盘使用率没有超过90%的               
    fi
}
   


monirtor_runtime(){
runtime="#!/bin/bash\n
source ${basepath}/$0 \n
info3\n
 while :\n
  do \n
# 提取根分区剩余空间\n
disk_size=\`df / | awk '/\//{print \$4}'\`
# 提取内存剩余空空间\n
mem_size=\`free | awk '/Mem/{print \$4}'\`\n
disk_size1=\`df -h / | awk '/\//{print \$4}'\`
# 提取内存剩余空空间\n
mem_size1=\`free -h | awk '/Mem/{print \$4}'\` \n
up_runtime=\` uptime |awk -F"," '{print \$1}'|awk -F"up"  '{print \$2}'\`\n 
echo \"\"\n
   # 注意内存和磁盘提取的空间大小都是以 Kb 为单位\n
   info9 \"---------------- 每10秒执行一次 ----------------\"\n
    if  [  \$disk_size -le 512000 -a \$mem_size -le 1024000  ];then\n
   \tinfo6 \"当前系统时间:`date`\"\n
   \tinfo6 \"当前系统运行时间:\${up_runtime}\"\n
   \tinfo \"当前根磁盘剩余空间是:\${disk_size1}\"\n
   \tinfo \"当前内存剩余大小是:\${mem_size1}\"\n
   \tinfo6 \"请及时清理磁盘空间!!!!\"\n
  else\n
    \tinfo6 \"当前系统时间:`date`\"\n
    \tinfo6 \"当前系统运行时间:\${up_runtime}\"\n
    \tinfo \"当前根磁盘剩余空间是:\${disk_size1}\"\n
     \tinfo3\n
    \tdisk_use_fy\n
    #\tinfo3\n
    #\tdisk_inode_fy\n
    \tinfo \"当前内存剩余大小是:\${mem_size1}\"\n
    \tmem_use_fy\n
    
  fi\n
   info3\n
   sleep 10 \n
 done\n
"
 echo -e ${runtime} > ${script_monitoring_dir_base}
}
  



#实时监控磁盘、内存信息
runtime_script_monitoring(){
 read -p "前台打印输出日志or后台打印的文件中(0==前台,1==后台)" runtime1
 [ -d ${log_dir_name} ] || mkdir -p ${log_dir_name}
 monirtor_runtime
 if [ -z ${runtime1} ];then
    info6 "请输入启动方式"
    runtime_script_monitoring
  else
   if [ ${runtime1} -eq 0 ];then 
        sh ${script_monitoring_dir_base}
   elif [ ${runtime1} -eq 1 ];then
     local ps_runtime=`ps -ef | grep ${script_monitoring_dir_base}|grep -v grep |awk '{print$2}'`
     #ps_runtime=${ps_runtime:-127}
 
    if [ ! -z ${ps_runtime}  ] ;then
         kill -9 ${ps_runtime}
         [ $? -eq 0 ] && info "关闭之前启动的服务,然后重新启动脚本"
         nohup  sh ${script_monitoring_dir_base}  >${log_dir_name}/monirtor_runtime.log &
         info8 "如果需要停止当前监控服务,则执行下述命令"
         info8 "kill -9 `ps -ef | grep ${script_monitoring_dir_base}|grep -v grep |awk '{print$2}'`"
         info6 "后台启动日志存放地址:tail -f ${log_dir_name}/monirtor_runtime.log"
       else
         nohup sh ${script_monitoring_dir_base} >${log_dir_name}/monirtor_runtime.log &
         info8 "如果需要停止当前监控服务,则执行下述命令"
         info8 "kill -9 `ps -ef | grep ${script_monitoring_dir_base}|grep -v grep |awk '{print$2}'`"
         info6 "后台启动日志存放地址:tail -f ${log_dir_name}/monirtor_runtime.log"
      fi
   fi
  fi
}
if [ $# -ne 0 ];then
   if [ $1 == run ];then
      runtime_script_monitoring
   fi
fi