编写Bash脚本:检查Collector下当日Repository文件夹并触发邮件告警
Bash脚本实现当日备份目录检查与邮件告警
没问题,我来帮你搞定这个脚本需求。首先我们明确核心逻辑:确认当日日期的备份目录是否存在,不存在则收集旧目录信息并发送告警邮件。下面是完整的脚本实现,我会一步步解释细节:
完整脚本代码
#!/bin/bash # 1. 配置基础参数,根据你的实际环境修改 # 替换为collector目录的绝对路径 COLLECTOR_DIR="/your/actual/path/collector" # 收件人邮箱 ALERT_EMAIL="your-alert-email@example.com" # 日期格式,需和备份文件夹的日期格式完全匹配!比如备份是repository-20240520就改成%Y%m%d DATE_FORMAT="%Y-%m-%d" # 备份目录的命名规则,比如你的文件夹是repository_2024-05-20就写"repository_$TODAY",如果是2024-05-20_repository就写"$TODAY_repository" TARGET_DIR_PATTERN="repository_$TODAY" # 2. 获取当日系统日期(RHEL系统date命令兼容这个格式) TODAY=$(date +$DATE_FORMAT) # 3. 检查当日备份目录是否存在 if [ ! -d "$COLLECTOR_DIR/$TARGET_DIR_PATTERN" ]; then # 收集所有旧的repository目录(排除当日的) OLD_DIRS=$(ls -d "$COLLECTOR_DIR"/repository* 2>/dev/null | grep -v "$TODAY") # 构造邮件内容 ALERT_CONTENT="告警信息: 未找到当日[$TODAY]的备份目录! 当前存在的旧备份目录如下: $OLD_DIRS" # 发送告警邮件 echo "$ALERT_CONTENT" | mail -s "备份目录异常告警($TODAY)" "$ALERT_EMAIL" # 可选:写入日志文件,方便后续排查 echo "$(date +'%Y-%m-%d %H:%M:%S') - 未找到当日备份目录,已发送告警邮件" >> /var/log/backup_check.log else # 可选:当日目录存在时也写入日志 echo "$(date +'%Y-%m-%d %H:%M:%S') - 当日备份目录存在,一切正常" >> /var/log/backup_check.log fi
关键细节说明
- 日期格式匹配:这是最容易出错的地方!一定要让
DATE_FORMAT和你的备份文件夹的日期格式完全一致。比如如果备份文件夹是repository20240520,就把DATE_FORMAT改成%Y%m%d,同时调整TARGET_DIR_PATTERN为repository$TODAY。 - 路径配置:
COLLECTOR_DIR必须写绝对路径,避免脚本在不同目录运行时出错。 - 邮件发送:确保你的RHEL系统已经配置好邮件服务(比如postfix或sendmail),
mail命令能正常发送邮件。如果测试时收不到邮件,可以先手动运行echo "test" | mail -s "test" your-email@example.com排查问题。 - 日志记录:添加日志可以帮你追踪脚本的执行情况,方便后续排查故障。
定时任务配置(可选)
因为你的备份工具是凌晨2点运行,建议把脚本设置在凌晨2点10分左右执行(给备份留足够时间),用crontab实现:
- 编辑crontab:
crontab -e - 添加一行:
10 2 * * * /bin/bash /path/to/your/backup_check_script.sh
- 保存退出即可,这样脚本每天凌晨2点10分自动运行。
测试建议
在正式部署前,你可以手动修改TODAY变量为一个不存在的日期,运行脚本测试是否能正常发送告警邮件;再改回当日日期,确认不会误发告警。
内容的提问来源于stack exchange,提问作者Roni.Miller
相关产品推荐
相关产品推荐

