fix: check-members.sh适配Docker环境+修复IFS解析
This commit is contained in:
@@ -40,13 +40,36 @@ while [[ $# -gt 0 ]]; do
|
||||
esac
|
||||
done
|
||||
|
||||
# ---- 获取 SSH 配置 ----
|
||||
# ---- 获取 SSH 和数据库配置 ----
|
||||
SSH_HOST=$(grep '^SSH_SERVER=' "$ENV_FILE" 2>/dev/null | head -1 | cut -d'=' -f2- | tr -d '"' | tr -d "'" | xargs)
|
||||
if [ -z "$SSH_HOST" ]; then
|
||||
echo "${RED}❌ 未找到 SSH_SERVER 配置,请检查 $ENV_FILE${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 从 DATABASE_URL 解析数据库连接参数
|
||||
DB_URL=$(grep '^DATABASE_URL=' "$ENV_FILE" 2>/dev/null | head -1 | cut -d'=' -f2- | tr -d '"' | tr -d "'" | xargs)
|
||||
# 提取用户名:密码:主机:端口
|
||||
DB_USER=$(echo "$DB_URL" | sed 's|.*://\([^:]*\):.*|\1|')
|
||||
DB_PASS=$(echo "$DB_URL" | sed 's|.*://[^:]*:\([^@]*\)@.*|\1|')
|
||||
DB_HOST=$(echo "$DB_URL" | sed 's|.*@\([^:]*\):.*|\1|')
|
||||
DB_PORT=$(echo "$DB_URL" | sed 's|.*:\([0-9]*\)/.*|\1|')
|
||||
|
||||
# 拼接目标数据库的连接串
|
||||
TARGET_URL="postgres://${DB_USER}:${DB_PASS}@127.0.0.1:${DB_PORT}/${DB_NAME}"
|
||||
|
||||
# PSQL 执行函数:通过 docker exec(服务器上 psql 在容器内)
|
||||
psql_exec() {
|
||||
local sql="$1"
|
||||
local result
|
||||
result=$(ssh "$SSH_HOST" "docker exec 1Panel-postgresql-FtMo psql '$TARGET_URL' -At -c \"$sql\" 2>/dev/null" 2>/dev/null)
|
||||
if [ -z "$result" ]; then
|
||||
result=$(ssh "$SSH_HOST" "psql -d $DB_NAME -At -c \"$sql\" 2>/dev/null" 2>/dev/null)
|
||||
fi
|
||||
# 去掉末尾空行
|
||||
echo "$result" | sed '/^$/d'
|
||||
}
|
||||
|
||||
echo -e "${CYAN}══════════════════════════════════════${NC}"
|
||||
echo -e "${CYAN} 会员订阅状态检查${NC}"
|
||||
echo -e "${CYAN} 数据库: ${BOLD}$DB_NAME${NC}"
|
||||
@@ -74,8 +97,9 @@ FROM users;
|
||||
SQL
|
||||
)
|
||||
|
||||
OVERVIEW=$(ssh "$SSH_HOST" "psql -d $DB_NAME -At -c \"$SQL_OVERVIEW\"" 2>/dev/null) || {
|
||||
echo -e "${RED}❌ SSH 连接失败: $SSH_HOST${NC}"
|
||||
OVERVIEW=$(psql_exec "$SQL_OVERVIEW") || {
|
||||
echo -e "${RED}❌ 数据库查询失败 (SSH: $SSH_HOST, DB: $DB_NAME)${NC}"
|
||||
echo -e "${YELLOW} 尝试直接连接: ssh $SSH_HOST docker exec 1Panel-postgresql-FtMo psql ...${NC}"
|
||||
exit 1
|
||||
}
|
||||
|
||||
@@ -106,7 +130,7 @@ ORDER BY
|
||||
SQL
|
||||
)
|
||||
|
||||
MEMBER_LIST=$(ssh "$SSH_HOST" "psql -d $DB_NAME -AqtF'|' -c \"$SQL_LIST\"" 2>/dev/null)
|
||||
MEMBER_LIST=$(psql_exec "$SQL_LIST")
|
||||
|
||||
# ---- 近期到期的活跃会员 ----
|
||||
SQL_EXPIRING=$(cat <<'SQL'
|
||||
@@ -124,7 +148,7 @@ ORDER BY membership_expires_at;
|
||||
SQL
|
||||
)
|
||||
|
||||
EXPIRING_LIST=$(ssh "$SSH_HOST" "psql -d $DB_NAME -AqtF'|' -c \"$SQL_EXPIRING\"" 2>/dev/null)
|
||||
EXPIRING_LIST=$(psql_exec "$SQL_EXPIRING")
|
||||
|
||||
# ---- JSON 输出 ----
|
||||
if [ "$OUTPUT_JSON" = true ]; then
|
||||
|
||||
Reference in New Issue
Block a user