如何在crontab调度的BTEQ任务(成功/失败)完成时发送通知邮件?
实现BTEQ脚本执行结果的邮件通知
当然可行!你完全不需要修改SQL代码,只需要在当前的Shell脚本里添加几行逻辑,捕获BTEQ的执行状态,然后根据状态发送对应的邮件通知就行。我给你整理了修改后的完整脚本,还有关键步骤的说明:
核心思路
- BTEQ执行完成后会返回退出状态码:
0表示执行成功,非0值表示执行失败(比如登录失败、SQL报错、脚本中断等) - 我们可以捕获这个状态码,然后根据状态拼接不同的邮件内容
- 利用系统自带的
mail命令(前提是你的服务器已经配置好邮件服务,比如Postfix/Sendmail)发送通知
修改后的完整脚本
#!/bin/bash # 配置BTEQ连接参数 bteqSYSTEM="VTDSSBP" bteqUSER="#######" bteqPWD="##########" # 日志文件路径 LOG_FILE="/DATA/home/pverma3/Daily_Jobs/Shell_Scripts/Customer_Details_TD.log" # 收件邮箱地址 NOTIFY_EMAIL="your-notification-email@example.com" # 任务名称(用于邮件主题) JOB_NAME="Customer_Details_TD BTEQ Job" # 执行BTEQ脚本,同时捕获标准输出和错误输出到日志 bteq <<- BTEQSCRIPT > ${LOG_FILE} 2>&1 .LOGON ${bteqSYSTEM}/${bteqUSER},${bteqPWD} .RUN FILE=/DATA/home/pverma3/Daily_Jobs/TD_Codes/Customer_Details.sql; .LOGOFF .QUIT BTEQSCRIPT # 捕获BTEQ的退出状态码 bteq_exit_code=$? # 根据执行状态准备邮件内容和主题 if [ ${bteq_exit_code} -eq 0 ]; then SUBJECT="[SUCCESS] ${JOB_NAME} completed successfully" BODY="The BTEQ job has finished successfully. Job Details: - Script Path: $0 - Execution Time: $(date) - Log File Location: ${LOG_FILE} --- Log Content --- $(cat ${LOG_FILE}) " else SUBJECT="[FAILURE] ${JOB_NAME} failed (Exit Code: ${bteq_exit_code})" BODY="The BTEQ job has failed. Please check the log for details. Job Details: - Script Path: $0 - Execution Time: $(date) - Exit Code: ${bteq_exit_code} - Log File Location: ${LOG_FILE} --- Log Content --- $(cat ${LOG_FILE}) " fi # 发送邮件通知 echo -e "${BODY}" | mail -s "${SUBJECT}" ${NOTIFY_EMAIL}
额外注意事项
- 邮件服务配置:确保你的服务器已经安装并配置了邮件服务(比如Postfix),否则
mail命令无法正常发送邮件,若不确定可联系运维确认。 - Crontab环境适配:Crontab的执行环境变量比用户登录环境少,建议在脚本里使用命令的绝对路径(比如
/usr/bin/bteq、/usr/bin/mail),避免出现"命令找不到"的问题。 - 日志大小优化:如果日志文件过大,直接放到邮件正文会影响可读性,可以改成发送日志作为附件:
# 替换原发送邮件的命令(需确保mail命令支持-a参数,若不支持可改用mutt) echo -e "${BODY}" | mail -a ${LOG_FILE} -s "${SUBJECT}" ${NOTIFY_EMAIL} - 密码安全性:脚本里明文存储密码有安全风险,建议改用Teradata的密码文件(
.tdlogon)或者环境变量来管理密码,降低泄露风险。
内容的提问来源于stack exchange,提问作者Piyush
相关产品推荐
相关产品推荐

