You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为现有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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 06:20:52