shell实现查询数据库发送邮件报警
参数校验:脚本首先检查执行时的参数个数,若缺少必要参数则提示错误信息并退出程序。 日志文件管理:创建或检查日志文件,确保日志存储路径存在。 时间获取:获取当前时间戳和执行日期,用于后续查询和日志记录。 数据库查询:根据提供的起始时间和结束时间查询数据库中记录数。 数据校验:若无新增数据且任务未失败,记录日志并发送通知邮件。 定时执行:通过cron表达式设置每日22:00运行脚本,确保数据及时处理。
发布日期:2021-04-30 21:04:06
浏览次数:113
分类:精选文章
本文共 1463 字,大约阅读时间需要 4 分钟。
功能描述
本脚本用于查询数据库表中记录数,检查是否存在昨日新增数据。若无新增数据且任务未计算失败,系统将发送邮件通知相关人员。
脚本文件
#!/bin/bash# 参数个数校验if [ $# -lt 1 ] then echo "参数错误~ 输入执行日期YYYYMMDD" exit fi # 创建日志文件LOG_FILE_NAME="/opt/monitor/指标任务-$1.log"# 检查日志文件是否存在if [ ! -e "$LOG_FILE_NAME" ] then touch $LOG_FILE_NAME fi LOG=$(date "+%Y-%m-%d %H:%M:%S")echo $LOG # 记录日志时间current_time=$(date +'%Y%m%d')echo $current_time # 获取当前时间戳# 设置查询开始时间if [ -n "$1" ] then start_time=$1 else start_time=$(date -d "1 days ago" +%Y%m%d) fi echo $start_time # 输出开始时间# SQL 查询总数query_total_num_sql="select count(1) from kg_SectorStat where STAT_DATE > '${start_time}' and STAT_DATE < '${current_time}'"total_num=$(/usr/bin/mysql -h192.168.0.189 -P3306 -uroot -p898 kongguan -s -e "${query_total_num_sql}")# 判断总数是否小于1if [ 0 -ge ${total_num} ] then end_time=$(date +%Y-%m-%d_%H:%M:%S) echo -e "${start_time} 任务运行失败:$end_time\n" >> $LOG_FILE_NAME # 发送通知邮件 echo -e "${start_time} 日任务运行失败!" | /bin/mail -s "${current_time} 日发电量指标任务通知" wangjzh@sarnath.cn fi 定时执行
脚本可通过以下命令定时执行:
./sendmaildb.sh $(date -d "1 days ago" +%Y%m%d) # 昨天日期
默认运行时间为每晚22:00,使用以下cron表达式配置任务调度:
0 22 */1 * * /opt/spark/sendmaildb.sh $(date -d "1 days ago" +%Y%m%d)
代码解释
注意事项
- 脚本参数需按照
YYYYMMDD格式传递执行日期 - 确保数据库连接信息及权限设置正确
- 定时任务可通过系统任务调度或监控工具配置
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2026年05月25日 16时34分07秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!