一、需求
监控系统负载,如果系统负载超过3,则记录系统状态信息,每隔20s监控一次,系统状态信息保留一个月。
二、实现及关键知识点
1、脚本内容
# cat 6.sh
#! /bin/bash
[ -d /tmp/logs ] || mkdir -p /tmp/logs
while :
do
load=`uptime |awk -F 'average:' '{print $2}' |cut -d ',' -f1 |sed 's/ //g' |cut -d '.' -f1`
if [ $load -gt 3 ]
then
top -bn1 |head -n 100 > /tmp/logs/top.`date +%s`
vmstat 1 10 > /tmp/logs/vmstat.`date +%s`
ss -an > /tmp/logs/ss.`date +%s`
fi
sleep 20
find /tmp/logs \( -name "top*" -o -name "vmstat*" -o -name "ss*" \) -mtime +30 |xargs rm -f
done
2、关键知识点
(1)||的用法
(2)while :与sleep组合实现死循环
(3)find的用法
三、验证
#准备删除文件
# touch -d "2021-12-06" top.txt
#模拟CPU压力
# stress -c 4
# uptime
21:38:06 up 24 min, 3 users, load average: 4.11, 1.77, 0.79
#执行脚本
# bash 6.sh
#查看结果,发现2021年文件被删除,系统状态信息已记录
# pwd
/tmp/logs
# ll
总用量 152
-rw-r--r-- 1 root root 62406 12月 6 21:38 ss.1701869896
-rw-r--r-- 1 root root 62303 12月 6 21:38 ss.1701869925
-rw-r--r-- 1 root root 7733 12月 6 21:38 top.1701869886
-rw-r--r-- 1 root root 7733 12月 6 21:38 top.1701869916
-rw-r--r-- 1 root root 989 12月 6 21:38 vmstat.1701869886
-rw-r--r-- 1 root root 987 12月 6 21:38 vmstat.1701869916