为现有Shell脚本添加数据库连接校验等条件需求
解决方案
以下是添加了数据库连接检查及失败告警功能的完整Shell脚本:
source ~/.bashrc # Needed by SQL*Plus on DEV # Old DEV - ORACLE_HOME=/app/app/oracle/product/12.2.0/client_1 ; export ORACLE_HOME ORACLE_HOME=/app/oracle/app/oracle/product/19.0.0/client_1 ; export ORACLE_HOME SQL_CMD=/app/oracle/app/oracle/product/19.0.0/client_1/bin/sqlplus # 替换为实际的管理员邮箱地址 ADMIN_EMAIL="admin@yourdomain.com" # 定义数据库连接检查函数 check_db_connection() { echo "正在检查数据库连接..." # 静默模式连接数据库,执行简单查询验证连通性 ${SQL_CMD} -s /nolog << EOF CONNECT ${CREDS} SELECT 1 FROM DUAL; EXIT; EOF # 获取SQL*Plus的退出状态码 local exit_code=$? if [ $exit_code -ne 0 ]; then echo "数据库连接失败,退出码: $exit_code" # 发送告警邮件 echo "数据库连接失败详情: 时间: $(date '+%Y%m%d-%H%M%S') 数据库信息: ${CREDS} 脚本将终止执行。" | mail -s "【告警】数据库连接失败" ${ADMIN_EMAIL} # 终止脚本,不再执行后续操作 exit 1 else echo "数据库连接成功,继续执行脚本..." fi } # Specify the location of the final file OUTDIR=/app/tableauTomcat/webapps/docs OUTFILE=/app/tableauTomcat/webapps/docs/provider_list.json PROVFILE=provider_list.json # Development Credentials CREDS=SOMEUSERNAME/SOMEPASSWORD@dev.clo0fiz.us-east-1.rds.amazonaws.com/dev # 先执行数据库连接检查,放在所有业务操作之前 check_db_connection DATE=$(date +%Y%m%d_%H_%M) BASE_DIR=${OUTDIR} if [ -f $BASE_DIR/$PROVFILE ]; then cp $BASE_DIR/$PROVFILE $BASE_DIR/$PROVFILE.$DATE /usr/bin/gzip $BASE_DIR/$PROVFILE.$DATE fi # Find and remove any files older than 3 days find $BASE_DIR -name "${PROVFILE}.*" -a -mtime +3 -exec rm {} \; echo ${OUTFILE} echo ${ORACLE_HOME} echo ${SQL_CMD} echo ${PATH} echo -n "Starting p_provider_timeline procedure: " date '+%Y%m%d-%H%M%S' ${SQL_CMD} /nolog << EOF0 CONNECT ${CREDS} exec p_provider_timeline; EOF0
关键功能说明
数据库连接检查:
- 用
sqlplus -s开启静默模式,避免输出冗余信息 - 通过
SELECT 1 FROM DUAL快速验证Oracle数据库连通性 - 捕获SQL*Plus的退出码,非0值代表连接或执行失败
- 用
失败告警处理:
- 连接失败时生成包含时间、数据库信息的告警内容,通过
mail命令发送给管理员 - 发送邮件后立即用
exit 1终止脚本,确保后续业务逻辑不会执行
- 连接失败时生成包含时间、数据库信息的告警内容,通过
注意事项:
- 需确保服务器已配置好邮件服务(如sendmail、postfix),否则邮件无法正常发送
- 务必将
ADMIN_EMAIL替换为实际的管理员邮箱地址 - 把原脚本中
DATE=date +%Y%m%d_%H_%M``改为DATE=$(date +%Y%m%d_%H_%M),这是更规范的命令替换写法
内容的提问来源于stack exchange,提问作者cp24
相关产品推荐
相关产品推荐

