监控Linux下指定目录的磁盘空间使用情况,并在达到预设阈值时触发报警的shell脚本。
假设有一个名为disk_monitor_config.txt的配置文件,用于设置需要监控的目录以及对应的阈值。每行配置的格式为目录=阈值,例如/var/log=90表示监控/var/log目录,当磁盘空间使用率达到90%时触发报警。
#!/bin/bash
# 配置文件路径
config_file="disk_monitor_config.txt"
# 日志文件路径
log_file="disk_monitor.log"
# 读取配置文件
read_config() {
local key_space=$1
local threshold=$2
while IFS= read -r line; do
local key=$(echo "$line" | awk -F '=' '{print $1}')
local value=$(echo "$line" | awk -F '=' '{print $2}')
if [ "$key" = "$key_space" ]; then
threshold=$value
break
fi
done < "$config_file"
echo "$threshold"
}
# 检查磁盘空间使用情况并触发报警
check_disk_space() {
local key_space=$1
local threshold=$(read_config "$key_space" 80) # 默认阈值为80%
local current_space=$(df -h "$key_space" | awk 'NR==2{print $5}' | tr -d '%')
if [ "$current_space" -ge "$threshold" ]; then
echo "磁盘空间已超过阈值!目录: $key_space,当前使用率: $current_space%"
echo "$(date '+%Y-%m-%d %H:%M:%S') - 目录: $key_space,当前使用率: $current_space%" >> "$log_file"
# 在此处触发报警的操作,例如发送邮件或其他通知方式
else
echo "磁盘空间正常。目录: $key_space,当前使用率: $current_space%"
echo "$(date '+%Y-%m-%d %H:%M:%S') - 目录: $key_space,当前使用率: $current_space%" >> "$log_file"
fi
}
# 主程序入口
main() {
while IFS= read -r line; do
check_disk_space "$line"
done < "$config_file"
}
# 执行主程序
main
while循环用于读取配置文件中的每一行,并逐行调用check_disk_space函数来检查磁盘空间使用情况并触发报警。
- while关键字开始一个循环,它会不断读取配置文件中的每一行。 IFS=的作用是将输入字段分隔符(Input Field Separator)设置为空,这样可以确保读取到完整的行内容,而不会因为默认的字段分隔符而被截断。
- read -r line将每一行内容读取到变量line中,-r选项会禁用对反斜杠的转义解释。
- check_disk_space "$line"调用check_disk_space函数,并将当前行内容作为参数传递给它。
- done表示循环的结束。
因此,整个while循环的作用是遍历配置文件中的每一行,并将每一行作为参数传递给check_disk_space函数进行处理。
在check_disk_space函数中,我们根据配置文件中的目录和阈值设置来检查磁盘空间使用情况,并根据需要触发报警。每次循环迭代都会处理一个目录,并基于其阈值进行判断。