1. 设置通知企业微信机器人
首先,确保你有企业微信机器人的 Webhook URL。以下是一个示例脚本,用于检查磁盘使用情况,并在超过阈值时发送通知。
脚本内容
创建一个新的脚本文件 /root/check_memory.sh:
监控单一目录(下面有提供监控所有目录的脚本)
#!/bin/bash
# 设置环境变量
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
maxUse=90 # 磁盘最大使用率,超过90%报警
wxWorkKey=*** # 企业微信机器人key
# 获取主机名和IP地址
hostname=$(hostname)
ip_address=$(hostname -I | awk '{print $1}')
# 获取Docker overlay2目录的使用情况(此处可以根据自己需要变更目录)
disk="/var/lib/docker/overlay2"
usage=$(df -h "$disk" | awk 'NR==2{print $5}' | cut -d'%' -f1)
# 使用正则表达式提取整数部分
usage=$(echo "$usage" | grep -o '[0-9]\+')
echo "Docker overlay2 目录使用率: $usage%" >> /var/log/check_memory.log 2>&1
# 检查磁盘使用率是否超过阈值
if [ "$usage" -gt "$maxUse" ]; then
# 磁盘空间满时,自动发送通知到企业微信
curl -sS "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=$wxWorkKey" \
-H "Content-Type: application/json; charset=UTF-8" \
-d "{\"msgtype\": \"text\",\"text\": {\"content\": \"主机 ${hostname} (${ip_address}) 的 Docker overlay2 目录使用率已达到 ${usage}%\"}}" >> /var/log/check_memory.log 2>&1 || echo "Failed to send message to WeCom." >> /var/log/check_memory.log 2>&1
fi
监控所有目录(可选)
#!/bin/bash
# 设置环境变量
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# 设置磁盘使用率阈值
maxUse=90
wxWorkKey="***" # 企业微信机器人key
# 获取主机名和IP地址
hostname=$(hostname)
ip_address=$(hostname -I | awk '{print $1}')
# 获取所有挂载点的使用情况
disk_usage=$(df -h | awk 'NR>1{print $6, $5}' | sed 's/%//')
# 初始化通知内容
notification="主机 ${hostname} (${ip_address}) 的以下挂载点使用率超过 ${maxUse}%:\n"
# 检查每个挂载点的使用情况
alert_triggered=0
while read -r line; do
mount_point=$(echo $line | awk '{print $1}')
usage=$(echo $line | awk '{print $2}')
if [ "$usage" -gt "$maxUse" ]; then
alert_triggered=1
notification="${notification}${mount_point} 使用率: ${usage}%\n"
fi
done <<< "$disk_usage"
# 记录并发送通知
echo -e "$notification" >> /var/log/check_memory.log 2>&1
if [ "$alert_triggered" -eq 1 ]; then
curl -sS "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=$wxWorkKey" \
-H "Content-Type: application/json; charset=UTF-8" \
-d "{\"msgtype\": \"text\",\"text\": {\"content\": \"$notification\"}}" >> /var/log/check_memory.log 2>&1 || echo "Failed to send message to WeCom." >> /var/log/check_memory.log 2>&1
fi
" >> /var/log/check_memory.log 2>&1 " 可去除,只是为了记录执行错误日志
2.设置脚本权限
确保脚本具有可执行权限:
sudo chmod +x /root/check_memory.sh
3.测试脚本
手动运行脚本,确保它能正常工作并写入日志:
sudo /root/check_memory.sh
检查日志文件 /var/log/check_memory.log,确认脚本输出正确(如果那段脚本已去除,这步可以不看
):
cat /var/log/check_memory.log
4.设置定时任务
编辑 root 用户的 crontab 文件,以定期运行该脚本:
sudo crontab -e
添加以下行,以每天上午 9 点和下午 6 点运行脚本:
0 9,18 * * * /root/check_memory.sh
Cron表达式的格式如下:
┌───────────── 分 (0 - 59)
│ ┌───────────── 时 (0 - 23)
│ │ ┌───────────── 日 (1 - 31)
│ │ │ ┌───────────── 月 (1 - 12)
│ │ │ │ ┌───────────── 星期几 (0 - 7) (星期天为 0 或 7)
│ │ │ │ │
│ │ │ │ │
* * * * *
你也可以通过查看crontab文件来确认设置是否成功:
sudo crontab -l
4.1 检查并启动Cron服务(可选)
首先确认你的系统是使用 cron 还是 crond:
- 对于大多数基于Debian的系统(如Ubuntu),cron守护进程通常叫做 cron
- 对于基于RedHat的系统(如CentOS、Fedora),cron守护进程通常叫做 crond。
对于Debian/Ubuntu系统:
检查cron服务状态:
sudo systemctl status cron
你应该看到类似以下的输出,表示 cron 正在运行:
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since ...
启动cron服务:
sudo systemctl start cron
对于RedHat/CentOS系统: 就是把上面的cron
改成 crond