startup.sh 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. #!/bin/bash
  2. #
  3. # Licensed to the Apache Software Foundation (ASF) under one or more
  4. # contributor license agreements. See the NOTICE file distributed with
  5. # this work for additional information regarding copyright ownership.
  6. # The ASF licenses this file to You under the Apache License, Version 2.0
  7. # (the "License"); you may not use this file except in compliance with
  8. # the License. You may obtain a copy of the License at
  9. #
  10. # http://www.apache.org/licenses/LICENSE-2.0
  11. #
  12. # Unless required by applicable law or agreed to in writing, software
  13. # distributed under the License is distributed on an "AS IS" BASIS,
  14. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. # See the License for the specific language governing permissions and
  16. # limitations under the License.
  17. #
  18. set -e
  19. DOLPHINSCHEDULER_BIN=${DOLPHINSCHEDULER_HOME}/bin
  20. DOLPHINSCHEDULER_SCRIPT=${DOLPHINSCHEDULER_HOME}/script
  21. DOLPHINSCHEDULER_LOGS=${DOLPHINSCHEDULER_HOME}/logs
  22. # start postgresql
  23. initPostgreSQL() {
  24. echo "checking postgresql"
  25. if [[ "${POSTGRESQL_HOST}" = "127.0.0.1" || "${POSTGRESQL_HOST}" = "localhost" ]]; then
  26. export PGPORT=${POSTGRESQL_PORT}
  27. echo "start postgresql service"
  28. rc-service postgresql restart
  29. # role if not exists, create
  30. flag=$(sudo -u postgres psql -tAc "SELECT 1 FROM pg_roles WHERE rolname='${POSTGRESQL_USERNAME}'")
  31. if [ -z "${flag}" ]; then
  32. echo "create user"
  33. sudo -u postgres psql -tAc "create user ${POSTGRESQL_USERNAME} with password '${POSTGRESQL_PASSWORD}'"
  34. fi
  35. # database if not exists, create
  36. flag=$(sudo -u postgres psql -tAc "select 1 from pg_database where datname='dolphinscheduler'")
  37. if [ -z "${flag}" ]; then
  38. echo "init db"
  39. sudo -u postgres psql -tAc "create database dolphinscheduler owner ${POSTGRESQL_USERNAME}"
  40. fi
  41. # grant
  42. sudo -u postgres psql -tAc "grant all privileges on database dolphinscheduler to ${POSTGRESQL_USERNAME}"
  43. fi
  44. echo "test postgresql service"
  45. while ! nc -z ${POSTGRESQL_HOST} ${POSTGRESQL_PORT}; do
  46. counter=$((counter+1))
  47. if [ $counter == 30 ]; then
  48. echo "Error: Couldn't connect to postgresql."
  49. exit 1
  50. fi
  51. echo "Trying to connect to postgresql at ${POSTGRESQL_HOST}:${POSTGRESQL_PORT}. Attempt $counter."
  52. sleep 5
  53. done
  54. echo "connect postgresql service"
  55. v=$(sudo -u postgres PGPASSWORD=${POSTGRESQL_PASSWORD} psql -h ${POSTGRESQL_HOST} -p ${POSTGRESQL_PORT} -U ${POSTGRESQL_USERNAME} -d dolphinscheduler -tAc "select 1")
  56. if [ "$(echo '${v}' | grep 'FATAL' | wc -l)" -eq 1 ]; then
  57. echo "Error: Can't connect to database...${v}"
  58. exit 1
  59. fi
  60. echo "import sql data"
  61. ${DOLPHINSCHEDULER_SCRIPT}/create-dolphinscheduler.sh
  62. }
  63. # start zk
  64. initZK() {
  65. echo -e "checking zookeeper"
  66. if [[ "${ZOOKEEPER_QUORUM}" = "127.0.0.1:2181" || "${ZOOKEEPER_QUORUM}" = "localhost:2181" ]]; then
  67. echo "start local zookeeper"
  68. /opt/zookeeper/bin/zkServer.sh restart
  69. else
  70. echo "connect remote zookeeper"
  71. echo "${ZOOKEEPER_QUORUM}" | awk -F ',' 'BEGIN{ i=1 }{ while( i <= NF ){ print $i; i++ } }' | while read line; do
  72. while ! nc -z ${line%:*} ${line#*:}; do
  73. counter=$((counter+1))
  74. if [ $counter == 30 ]; then
  75. echo "Error: Couldn't connect to zookeeper."
  76. exit 1
  77. fi
  78. echo "Trying to connect to zookeeper at ${line}. Attempt $counter."
  79. sleep 5
  80. done
  81. done
  82. fi
  83. }
  84. # start nginx
  85. initNginx() {
  86. echo "start nginx"
  87. nginx &
  88. }
  89. # start master-server
  90. initMasterServer() {
  91. echo "start master-server"
  92. ${DOLPHINSCHEDULER_BIN}/dolphinscheduler-daemon.sh stop master-server
  93. ${DOLPHINSCHEDULER_BIN}/dolphinscheduler-daemon.sh start master-server
  94. }
  95. # start worker-server
  96. initWorkerServer() {
  97. echo "start worker-server"
  98. ${DOLPHINSCHEDULER_BIN}/dolphinscheduler-daemon.sh stop worker-server
  99. ${DOLPHINSCHEDULER_BIN}/dolphinscheduler-daemon.sh start worker-server
  100. }
  101. # start api-server
  102. initApiServer() {
  103. echo "start api-server"
  104. ${DOLPHINSCHEDULER_BIN}/dolphinscheduler-daemon.sh stop api-server
  105. ${DOLPHINSCHEDULER_BIN}/dolphinscheduler-daemon.sh start api-server
  106. }
  107. # start logger-server
  108. initLoggerServer() {
  109. echo "start logger-server"
  110. ${DOLPHINSCHEDULER_BIN}/dolphinscheduler-daemon.sh stop logger-server
  111. ${DOLPHINSCHEDULER_BIN}/dolphinscheduler-daemon.sh start logger-server
  112. }
  113. # start alert-server
  114. initAlertServer() {
  115. echo "start alert-server"
  116. ${DOLPHINSCHEDULER_BIN}/dolphinscheduler-daemon.sh stop alert-server
  117. ${DOLPHINSCHEDULER_BIN}/dolphinscheduler-daemon.sh start alert-server
  118. }
  119. # print usage
  120. printUsage() {
  121. echo -e "Dolphin Scheduler is a distributed and easy-to-expand visual DAG workflow scheduling system,"
  122. echo -e "dedicated to solving the complex dependencies in data processing, making the scheduling system out of the box for data processing.\n"
  123. echo -e "Usage: [ all | master-server | worker-server | api-server | alert-server | frontend ]\n"
  124. printf "%-13s: %s\n" "all" "Run master-server, worker-server, api-server, alert-server and frontend."
  125. printf "%-13s: %s\n" "master-server" "MasterServer is mainly responsible for DAG task split, task submission monitoring."
  126. printf "%-13s: %s\n" "worker-server" "WorkerServer is mainly responsible for task execution and providing log services.."
  127. printf "%-13s: %s\n" "api-server" "ApiServer is mainly responsible for processing requests from the front-end UI layer."
  128. printf "%-13s: %s\n" "alert-server" "AlertServer mainly include Alarms."
  129. printf "%-13s: %s\n" "frontend" "Frontend mainly provides various visual operation interfaces of the system."
  130. }
  131. # init config file
  132. source /root/startup-init-conf.sh
  133. LOGFILE=/var/log/nginx/access.log
  134. case "$1" in
  135. (all)
  136. initZK
  137. initPostgreSQL
  138. initMasterServer
  139. initWorkerServer
  140. initApiServer
  141. initAlertServer
  142. initLoggerServer
  143. initNginx
  144. LOGFILE=/var/log/nginx/access.log
  145. ;;
  146. (master-server)
  147. initZK
  148. initPostgreSQL
  149. initMasterServer
  150. LOGFILE=${DOLPHINSCHEDULER_LOGS}/dolphinscheduler-master.log
  151. ;;
  152. (worker-server)
  153. initZK
  154. initPostgreSQL
  155. initWorkerServer
  156. initLoggerServer
  157. LOGFILE=${DOLPHINSCHEDULER_LOGS}/dolphinscheduler-worker.log
  158. ;;
  159. (api-server)
  160. initZK
  161. initPostgreSQL
  162. initApiServer
  163. LOGFILE=${DOLPHINSCHEDULER_LOGS}/dolphinscheduler-api-server.log
  164. ;;
  165. (alert-server)
  166. initPostgreSQL
  167. initAlertServer
  168. LOGFILE=${DOLPHINSCHEDULER_LOGS}/dolphinscheduler-alert.log
  169. ;;
  170. (frontend)
  171. initNginx
  172. LOGFILE=/var/log/nginx/access.log
  173. ;;
  174. (help)
  175. printUsage
  176. exit 1
  177. ;;
  178. (*)
  179. printUsage
  180. exit 1
  181. ;;
  182. esac
  183. # init directories and log files
  184. mkdir -p ${DOLPHINSCHEDULER_LOGS} && mkdir -p /var/log/nginx/ && cat /dev/null >> ${LOGFILE}
  185. echo "tail begin"
  186. exec bash -c "tail -n 1 -f ${LOGFILE}"