【Linux运维】shell脚本检查服务器内存和CPU利用率
在管理服务器时候写了一个 shell脚本,在服务上实现每天凌晨3点查系统的指定文件夹下的容量大小,如果超过10G就要删除3天前的内容,还要时刻查询内存和cpu利用率,如果超过80%就要提示用户出现过载。总的来说,该脚本用于检查系统状态,包括文件夹容量和系统资源利用率等方面,如果出现异常情况,则会提示用户采取相应的行动。这一段代码用于检查文件夹容量,如果超过10G就删除3天前的内容。这是 Bash
在管理服务器时候写了一个 shell脚本,在服务上实现每天凌晨3点查系统的指定文件夹下的容量大小,如果超过10G就要删除3天前的内容,还要时刻查询内存和cpu利用率,如果超过80%就要提示用户出现过载
#!/bin/bash
# 指定要检查的文件夹路径
folder_path="/path/to/folder"
# 获取当前日期前三天的日期
three_days_ago=$(date -d "3 days ago" +%Y%m%d)
# 获取当前日期时间
datetime=$(date +%Y%m%d_%H%M%S)
# 检查文件夹容量,如果超过10G就删除3天前的内容
folder_size=$(du -s $folder_path | awk '{print $1}')
if [ $folder_size -gt 10485760 ]; then
echo "$datetime: Folder size exceeds 10G, deleting files before $three_days_ago"
find $folder_path -type f -name "*" -mtime +3 -delete
fi
# 检查内存和CPU利用率,如果超过80%就提示用户出现过载
mem_usage=$(free | awk '/Mem/{printf("%.2f"), $3/$2*100}')
cpu_usage=$(top -bn1 | awk '/Cpu/{printf("%.2f"), $2}')
if (( $(echo "$mem_usage > 80" | bc -l) )) || (( $(echo "$cpu_usage > 80" | bc -l) )); then
echo "$datetime: System is overloaded, please take action"
fi
将以上代码保存为一个.sh文件,然后通过crontab在每天凌晨3点运行即可:
crontab -e
0 3 * * * /path/to/script.sh
以下是 system_check.sh
脚本中每一行的详细解释:
#!/bin/bash
这是 Bash 脚本的第一行,用于指定脚本使用的解释器。在这里,#!/bin/bash
表示使用 Bash 解释器来执行该脚本。
# 指定要检查的文件夹路径
folder_path="/path/to/folder"
这一行定义了一个变量 folder_path
,用于指定要检查的文件夹路径。在这里,变量的值为 /path/to/folder
,可以根据实际情况修改。
# 获取当前日期前三天的日期
three_days_ago=$(date -d "3 days ago" +%Y%m%d)
这一行使用 date
命令获取当前日期前三天的日期,并将其保存到变量 three_days_ago
中。+%Y%m%d
表示设置日期的格式为年月日,例如 20220101
。
# 获取当前日期时间
datetime=$(date +%Y%m%d_%H%M%S)
这一行使用 date
命令获取当前日期时间,并将其保存到变量 datetime
中。+%Y%m%d_%H%M%S
表示设置日期时间的格式为年月日_时分秒,例如 20220101_120000
。
# 检查文件夹容量,如果超过10G就删除3天前的内容
folder_size=$(du -s $folder_path | awk '{print $1}')
if [ $folder_size -gt 10485760 ]; then
echo "$datetime: Folder size exceeds 10G, deleting files before $three_days_ago"
find $folder_path -type f -name "*" -mtime +3 -delete
fi
这一段代码用于检查文件夹容量,如果超过10G就删除3天前的内容。具体来说:
du -s $folder_path
命令用于计算指定文件夹的容量大小,并将结果保存到变量folder_size
中。-s
表示只显示总计大小,不显示每个子目录的大小。if [ $folder_size -gt 10485760 ]; then
表示如果文件夹的容量大小超过10G(即10485760
KB),则执行下面的命令。echo "$datetime: Folder size exceeds 10G, deleting files before $three_days_ago"
表示输出一条提示信息,指示文件夹容量超过10G,并将日期时间和三天前的日期插入到提示信息中。find $folder_path -type f -name "*" -mtime +3 -delete
命令用于查找并删除文件夹中3天前的文件。-type f
表示只查找文件,-name "*"
表示查找所有文件,-mtime +3
表示查找修改时间在3天前的文件,-delete
表示删除查找到的文件。
# 检查内存和CPU利用率,如果超过80%就提示用户出现过载
mem_usage=$(free | awk '/Mem/{printf("%.2f"), $3/$2*100}')
cpu_usage=$(top -bn1 | awk '/Cpu/{printf("%.2f"), $2}')
if (( $(echo "$mem_usage > 80" | bc -l) )) || (( $(echo "$cpu_usage > 80" | bc -l) )); then
echo "$datetime: System is overloaded, please take action"
fi
这一段代码用于检查内存和 CPU 利用率,如果超过80%就提示用户出现过载。- free
命令用于查看系统内存使用情况。| awk '/Mem/{printf("%.2f"), $3/$2*100}'
表示将 free
命令的输出通过管道传递给 awk
命令,查找含有 Mem
的行,并计算内存使用率。$3/$2*100
表示计算已用内存占总内存的百分比,并输出到变量 mem_usage
中。
top -bn1
命令用于查看当前 CPU 使用情况。| awk '/Cpu/{printf("%.2f"), $2}'
表示将top
命令的输出通过管道传递给awk
命令,查找含有Cpu
的行,并输出第二个字段(即 CPU 利用率)到变量cpu_usage
中。if (( $(echo "$mem_usage > 80" | bc -l) )) || (( $(echo "$cpu_usage > 80" | bc -l) )); then
表示如果内存使用率或 CPU 利用率超过80%,则执行下面的命令。echo "$datetime: System is overloaded, please take action"
表示输出一条提示信息,指示系统出现过载,并将日期时间插入到提示信息中。
总的来说,该脚本用于检查系统状态,包括文件夹容量和系统资源利用率等方面,如果出现异常情况,则会提示用户采取相应的行动。
更多推荐
所有评论(0)