需求:应用会根据日期,每日创建以日期为名称的database用于记录应用日志。完成日志保留90天的策略,每日检查,删除过期数据
#!/bin/bash
set -e # 遇到错误时立即退出
# 使用环境变量存储敏感信息
MONGO_PASSWORD="${MONGO_PASSWORD:-"passwd"}" # 默认值为 "passwd"
# 获取脚本所在目录
script_directory=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
# 计算90天前的日期
target_db_prefix=$(date +%Y%m%d -d "90 day ago")
# 定义常量路径和参数
MONGOSH_BIN="${script_directory}/bin/mongosh"
HOST="127.0.0.1"
PORT="28017"
TLS_CA_FILE="ca/ca.pem"
TLS_CERT_FILE="ca/xxx.pem"
# 检查 mongosh 是否存在
if [[ ! -x "$MONGOSH_BIN" ]]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') -- Error: mongosh not found at $MONGOSH_BIN"
exit 1
fi
# 检查 TLS 证书文件是否存在
if [[ ! -f "$TLS_CA_FILE" || ! -f "$TLS_CERT_FILE" ]]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') -- Error: TLS certificate files not found"
exit 1
fi
# 构建 mongosh 命令
mongosh_command=(
"$MONGOSH_BIN"
--host "$HOST"
--port "$PORT"
--username admin
--password "$MONGO_PASSWORD"
--tls
--tlsCAFile "$TLS_CA_FILE"
--tlsCertificateKeyFile "$TLS_CERT_FILE"
--quiet
--eval "db.getMongo().getDBNames().filter(function(dbName) { return dbName.startsWith('${target_db_prefix}'); }).forEach(function(dbName) { db.getSiblingDB(dbName).dropDatabase(); });"
)
# 执行 mongosh 命令并捕获返回值
if ! output=$("${mongosh_command[@]}" 2>&1); then
echo "$(date '+%Y-%m-%d %H:%M:%S') -- Error: $output"
exit 1
else
echo "$(date '+%Y-%m-%d %H:%M:%S') -- db<$target_db_prefix> del"
fi