我有一个日志文件,内容如下。我们将其命名为 cpu_usage.out:
2023-04-12 12:04: CPU STATISTICS CRITICAL : USED:- 2.52% IDLE:- 97.49%|CpuUsed=2.52;0;1 CpuIdle=97.49;0;1
2023-04-12 12:05: CPU STATISTICS WARNING : USED:- 0.5% IDLE:- 99.50%|CpuUsed=0.5;0;1 CpuIdle=99.50;0;1
2023-04-12 12:06: CPU STATISTICS CRITICAL : USED:- 3% IDLE:- 97.00%|CpuUsed=3;0;1 CpuIdle=97.00;0;1
2023-04-12 12:07: CPU STATISTICS CRITICAL : USED:- 1.53% IDLE:- 98.48%|CpuUsed=1.53;0;1 CpuIdle=98.48;0;1
2023-04-12 12:08: CPU STATISTICS CRITICAL : USED:- 4% IDLE:- 96.00%|CpuUsed=4;0;1 CpuIdle=96.00;0;1
2023-04-12 12:09: CPU STATISTICS CRITICAL : USED:- 3% IDLE:- 97.00%|CpuUsed=3;0;1 CpuIdle=97.00;0;1
此日志文件通过 cron(间隔 1 分钟)生成,用于监控 CPU 利用率。现在我需要编写另一个脚本来扫描此日志文件。我需要以下脚本:
- 检测“CRITICAL”关键字并保持 30 分钟
- 如果连续30分钟,则发送电子邮件并终止tail命令
- 否则什么也不做
我有下面的简单脚本,但我不知道如何连续约 30 分钟监控“CRITICAL”关键字。
#!/bin/bash
tail -f /root/cpu_usage.out | while read line
do case "$line" in
*"CRITICAL"*) echo "$line"
#*"CRITICAL"*) echo "$line" | mutt -s "The CPU of server $(hostname) is high for about 30 minutes ago" [email protected];
;;
esac
done
我尝试了以下脚本,但是当我运行它时,光标只是挂在那里
#!/bin/bash
LOGFILE=/root/cpu_usage.out
tail -fn30 $LOGFILE | while read line;
do
CRIT=$(echo $LOGFILE | grep -m 30 "CRITICAL" | wc -l)
if [[ $CRIT -ge 30 ]]
then
pkill -P $$ tail
echo "$line"
fi
done
注意:首先忘记了电子邮件部分。我稍后会处理。
请指教。