init.sh 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #!/bin/bash
  2. if [ -z "${BASE_DIR}" ]; then
  3. BASE_DIR=$(
  4. cd "$(dirname "$(realpath "$0")")/.." || exit
  5. pwd
  6. )
  7. fi
  8. . "${BASE_DIR}"/conf/env.sh
  9. . "${BASE_DIR}"/bin/common/functions.sh
  10. BANNED_USER="root"
  11. USER="$(whoami)"
  12. CURRENT_HOST=$(hostname -s)
  13. PROJECT_NAME=$(basename "${BASE_DIR}")
  14. # 从 conf/workers.ini 加载 RELEASE_HOST + DATAX_WORKERS + 权重 + 加权随机池
  15. declare -A DATAX_WORKERS_WEIGHTS
  16. DATAX_WORKERS=()
  17. _section=""
  18. while IFS= read -r _line; do
  19. _line="${_line%%[;#]*}"
  20. _line="$(echo -n "${_line}" | xargs)"
  21. [[ -z "${_line}" ]] && continue
  22. if [[ "${_line}" =~ ^\[(.+)\]$ ]]; then
  23. _section="${BASH_REMATCH[1]}"
  24. continue
  25. fi
  26. case "${_section}" in
  27. release)
  28. if [[ "${_line}" =~ ^host[[:space:]]*=[[:space:]]*(.+)$ ]]; then
  29. RELEASE_HOST="${BASH_REMATCH[1]}"
  30. fi
  31. ;;
  32. weights)
  33. if [[ "${_line}" =~ ^([^[:space:]=]+)[[:space:]]*=[[:space:]]*([0-9]+)$ ]]; then
  34. DATAX_WORKERS+=("${BASH_REMATCH[1]}")
  35. DATAX_WORKERS_WEIGHTS["${BASH_REMATCH[1]}"]="${BASH_REMATCH[2]}"
  36. fi
  37. ;;
  38. esac
  39. done < "${BASE_DIR}/conf/workers.ini"
  40. DATAX_WORKERS_QUEUE=()
  41. for _key in "${!DATAX_WORKERS_WEIGHTS[@]}"; do
  42. for ((_i = 0; _i < DATAX_WORKERS_WEIGHTS[$_key]; _i++)); do
  43. DATAX_WORKERS_QUEUE+=("${_key}")
  44. done
  45. done
  46. unset _section _line _key _i
  47. if [ "${USER}" == "${BANNED_USER}" ]; then
  48. 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"
  49. exit 18
  50. elif [ "${USER}" == "${RELEASE_USER}" ]; then
  51. IS_RUN_BY_RELEASE_USER="1"
  52. pretty_print "${NORM_MGT}Project ${NORM_GRN}${PROJECT_NAME}${NORM_MGT} is running by release user ${NORM_GRN}${RELEASE_USER}"
  53. else
  54. IS_RUN_BY_NORMAL_USER="1"
  55. . "${BASE_DIR}"/bin/common/print-constants.sh
  56. if [ "${CURRENT_HOST}" == "${RELEASE_HOST}" ] && [ -n "${IS_RUN_BY_NORMAL_USER}" ]; then
  57. cow_says
  58. fi
  59. pretty_print "${NORM_MGT}Project ${NORM_GRN}${PROJECT_NAME}${NORM_MGT} is running by normal user ${NORM_GRN}${USER}"
  60. fi
  61. if [[ "${BASE_DIR}" =~ "${RELEASE_ROOT_DIR}/${PROJECT_NAME}/"* ]]; then
  62. IS_RUN_IN_RELEASE_DIR="1"
  63. pretty_print "${NORM_MGT}Project ${NORM_GRN}${PROJECT_NAME}${NORM_MGT} is running in release dir ${NORM_GRN}${RELEASE_ROOT_DIR}/${PROJECT_NAME}"
  64. else
  65. pretty_print "${NORM_MGT}Project ${NORM_GRN}${PROJECT_NAME}${NORM_MGT} is running in normal user dir ${NORM_GRN}${BASE_DIR}"
  66. fi
  67. export CURRENT_HOST
  68. export DATAX_WORKERS
  69. export BA_LITTLE_CUTE
  70. export DCP_LITTLE_CUTE
  71. export ETL_LITTLE_CUTE
  72. export SKB_LITTLE_CUTE
  73. export REALTIME_LITTLE_CUTE
  74. export IS_RUN_IN_RELEASE_DIR
  75. export IS_RUN_BY_RELEASE_USER
  76. echo -en "${NORM_GRN}"
  77. echo -en "${DO_RESET}"