centos7写一个监控系统的shell,要求如下 cpu使用率超过80%(Shell变量单独配置)并且持续60秒钟(Shell变量单独配置)以上使用Curl post json方式调用http://192.168.220.1:18181/jeecg-boot/luodiye/sendMsg接口,传入以下JSON信息 服务器ip(Shell变量单独配置)+当前CPU使用率+持续时间+CPU占用率最高的前3个进程名字以及文件路径 硬盘使用率超过90%(Shell变量单独配置)并且持续90秒钟(Shell变量单独配置)以上使用Curl post json方式调用http://192.168.220.1:18181/jeecg-boot/luodiye/sendMsg接口,传入以下JSON信息 服务器ip(Shell变量单独配置)+当前硬盘使用率+持续时间+磁盘占用最大的3个文件以及大小(以KB、GB、TB等为单位,精确到1位小数)和文件路径 内存使用率超过70%(Shell变量单独配置)并且持续70秒钟(Shell变量单独配置)以上使用Curl post json方式调用http://192.168.220.1:18181/jeecg-boot/luodiye/sendMsg接口,传入以下JSON信息 服务器ip(Shell变量单独配置)+当前内存使用率+持续时间+内存占用率最高的前3个进程名字以及文件路径 脚本持续监控,每隔N秒(Shell变量单独配置)执行一次,要求直接给出最完美的shell代码,仔细检查可能存在的语法错误,必需交付准确无错误的代码,一次性说完,无需任何解释
时间: 2023-02-09 22:50:12 浏览: 113
```
#!/bin/bash
# 配置参数
cpu_threshold=80
cpu_duration=60
disk_threshold=90
disk_duration=90
memory_threshold=70
memory_duration=70
interval=10
ip="192.168.220.1"
port="18181"
path="/jeecg-boot/luodiye/sendMsg"
url="http://$ip:$port$path"
# 监控函数
monitor() {
local threshold=$1
local duration=$2
local resource=$3
local process=$4
local process_command="ps aux --sort=-%cpu | awk '{print \$0\" \"NR}' | grep -v 'awk' | awk '\$11>$threshold {print \$0}' | head -3"
local resource_command="awk '\$1>$threshold {print \$0}' /proc/stat | awk '{print \$1}' | awk '{s+=$1} END {print s/4}'"
while :; do
local count=0
local process_name=''
local process_path=''
local resource_percent=0
local resource_percent_duration=0
while :; do
# 获取当前资源使用率
resource_percent=$(eval $resource_command)
if [ $(echo "$resource_percent > $threshold" | bc) -eq 1 ]; then
let count++
resource_percent_duration=$count
sleep 1
else
count=0
resource_percent_duration=0
fi
# 获取当前占用资源最高的前3个进程
process_name=$(eval $process_command | awk '{print $11}')
process_path=$(eval $process_command | awk '{print $12}')
# 超过阈值且持续时间超过设定值,发送请求
if [ $count -ge $duration ]; then
local data="{\"server_ip\":\"$(hostname -I)\",\"resource\":\"$resource\",\"resource_percent\":\"$resource_percent\",\"duration\":\"$resource_percent_duration\",\"process_name\":\"$process_name\",\"process_path\":\"$process_path\"}"
curl -H "Content-Type: application/json" -X POST -d $data $url
exit
fi
done
done
}
# 启动监控
monitor $cpu_threshold $cpu_duration "cpu" "ps aux --sort=-%cpu | awk '{print $0\" \"NR}' | grep -v 'awk' | awk '\$11>$cpu_threshold {print $0}' | head -3" &
monitor $disk_threshold $disk_duration "disk" "du -a / 2
阅读全文