#!/bin/bash if [ -z "${BASE_DIR}" ]; then BASE_DIR=$( cd "$(dirname "$(realpath "$0")")/.." || exit pwd ) fi . "${BASE_DIR}"/conf/env.sh . "${BASE_DIR}"/bin/common/functions.sh BANNED_USER="root" USER="$(whoami)" CURRENT_HOST=$(hostname -s) PROJECT_NAME=$(basename "${BASE_DIR}") # 从 conf/workers.ini 加载 RELEASE_HOST + DATAX_WORKERS + 权重 + 加权随机池 declare -A DATAX_WORKERS_WEIGHTS DATAX_WORKERS=() _section="" while IFS= read -r _line; do _line="${_line%%[;#]*}" _line="$(echo -n "${_line}" | xargs)" [[ -z "${_line}" ]] && continue if [[ "${_line}" =~ ^\[(.+)\]$ ]]; then _section="${BASH_REMATCH[1]}" continue fi case "${_section}" in release) if [[ "${_line}" =~ ^host[[:space:]]*=[[:space:]]*(.+)$ ]]; then RELEASE_HOST="${BASH_REMATCH[1]}" fi ;; weights) if [[ "${_line}" =~ ^([^[:space:]=]+)[[:space:]]*=[[:space:]]*([0-9]+)$ ]]; then DATAX_WORKERS+=("${BASH_REMATCH[1]}") DATAX_WORKERS_WEIGHTS["${BASH_REMATCH[1]}"]="${BASH_REMATCH[2]}" fi ;; esac done < "${BASE_DIR}/conf/workers.ini" DATAX_WORKERS_QUEUE=() for _key in "${!DATAX_WORKERS_WEIGHTS[@]}"; do for ((_i = 0; _i < DATAX_WORKERS_WEIGHTS[$_key]; _i++)); do DATAX_WORKERS_QUEUE+=("${_key}") done done unset _section _line _key _i if [ "${USER}" == "${BANNED_USER}" ]; then pretty_print "${NORM_RED}Project ${NORM_GRN}${PROJECT_NAME}${NORM_RED} is running by banned user ${NORM_GRN}${BANNED_USER}${NORM_RED}, exit with error code ${NORM_GRN}18" exit 18 elif [ "${USER}" == "${RELEASE_USER}" ]; then IS_RUN_BY_RELEASE_USER="1" pretty_print "${NORM_MGT}Project ${NORM_GRN}${PROJECT_NAME}${NORM_MGT} is running by release user ${NORM_GRN}${RELEASE_USER}" else IS_RUN_BY_NORMAL_USER="1" . "${BASE_DIR}"/bin/common/print-constants.sh if [ "${CURRENT_HOST}" == "${RELEASE_HOST}" ] && [ -n "${IS_RUN_BY_NORMAL_USER}" ]; then cow_says fi pretty_print "${NORM_MGT}Project ${NORM_GRN}${PROJECT_NAME}${NORM_MGT} is running by normal user ${NORM_GRN}${USER}" fi if [[ "${BASE_DIR}" =~ "${RELEASE_ROOT_DIR}/${PROJECT_NAME}/"* ]]; then IS_RUN_IN_RELEASE_DIR="1" pretty_print "${NORM_MGT}Project ${NORM_GRN}${PROJECT_NAME}${NORM_MGT} is running in release dir ${NORM_GRN}${RELEASE_ROOT_DIR}/${PROJECT_NAME}" else pretty_print "${NORM_MGT}Project ${NORM_GRN}${PROJECT_NAME}${NORM_MGT} is running in normal user dir ${NORM_GRN}${BASE_DIR}" fi export CURRENT_HOST export DATAX_WORKERS export BA_LITTLE_CUTE export DCP_LITTLE_CUTE export ETL_LITTLE_CUTE export SKB_LITTLE_CUTE export REALTIME_LITTLE_CUTE export IS_RUN_IN_RELEASE_DIR export IS_RUN_BY_RELEASE_USER echo -en "${NORM_GRN}" echo -en "${DO_RESET}"