文章目录
- 脚本简介
- 脚本注解
- 修改脚本
- 执行方式
- 执行结果
- 前台显示
- 后台显示
- 脚本内容
脚本简介
- 基于运维统一脚本中,10、检测服务脚本下的实时监控磁盘、内存信息(每分钟)选项
- 使用yum安装(yum仓库),系统版本Centos7
脚本注解
- 该脚本为了在Centos7服务器实时监控磁盘、内存信息(每分钟)
- 脚本分为两个文件
- 第一个为监控脚本,用于监控服务器相关信息(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
#根据屏幕上打印的提示选择即可
执行结果
前台显示
后台显示
脚本内容
#!/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