startup.sh 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  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 database
  23. initDatabase() {
  24. echo "test ${DATABASE_TYPE} service"
  25. while ! nc -z ${DATABASE_HOST} ${DATABASE_PORT}; do
  26. counter=$((counter+1))
  27. if [ $counter == 30 ]; then
  28. echo "Error: Couldn't connect to ${DATABASE_TYPE}."
  29. exit 1
  30. fi
  31. echo "Trying to connect to ${DATABASE_TYPE} at ${DATABASE_HOST}:${DATABASE_PORT}. Attempt $counter."
  32. sleep 5
  33. done
  34. echo "connect ${DATABASE_TYPE} service"
  35. if [ ${DATABASE_TYPE} = "mysql" ]; then
  36. v=$(mysql -h${DATABASE_HOST} -P${DATABASE_PORT} -u${DATABASE_USERNAME} --password=${DATABASE_PASSWORD} -D ${DATABASE_DATABASE} -e "select 1" 2>&1)
  37. if [ "$(echo ${v} | grep 'ERROR' | wc -l)" -eq 1 ]; then
  38. echo "Error: Can't connect to database...${v}"
  39. exit 1
  40. fi
  41. else
  42. v=$(sudo -u postgres PGPASSWORD=${DATABASE_PASSWORD} psql -h ${DATABASE_HOST} -p ${DATABASE_PORT} -U ${DATABASE_USERNAME} -d ${DATABASE_DATABASE} -tAc "select 1")
  43. if [ "$(echo ${v} | grep 'FATAL' | wc -l)" -eq 1 ]; then
  44. echo "Error: Can't connect to database...${v}"
  45. exit 1
  46. fi
  47. fi
  48. echo "import sql data"
  49. ${DOLPHINSCHEDULER_SCRIPT}/create-dolphinscheduler.sh
  50. }
  51. # start zk
  52. initZK() {
  53. echo "connect remote zookeeper"
  54. echo "${ZOOKEEPER_QUORUM}" | awk -F ',' 'BEGIN{ i=1 }{ while( i <= NF ){ print $i; i++ } }' | while read line; do
  55. while ! nc -z ${line%:*} ${line#*:}; do
  56. counter=$((counter+1))
  57. if [ $counter == 30 ]; then
  58. echo "Error: Couldn't connect to zookeeper."
  59. exit 1
  60. fi
  61. echo "Trying to connect to zookeeper at ${line}. Attempt $counter."
  62. sleep 5
  63. done
  64. done
  65. }
  66. # start nginx
  67. initNginx() {
  68. echo "start nginx"
  69. nginx &
  70. }
  71. # start master-server
  72. initMasterServer() {
  73. echo "start master-server"
  74. ${DOLPHINSCHEDULER_BIN}/dolphinscheduler-daemon.sh stop master-server
  75. ${DOLPHINSCHEDULER_BIN}/dolphinscheduler-daemon.sh start master-server
  76. }
  77. # start worker-server
  78. initWorkerServer() {
  79. echo "start worker-server"
  80. ${DOLPHINSCHEDULER_BIN}/dolphinscheduler-daemon.sh stop worker-server
  81. ${DOLPHINSCHEDULER_BIN}/dolphinscheduler-daemon.sh start worker-server
  82. }
  83. # start api-server
  84. initApiServer() {
  85. echo "start api-server"
  86. ${DOLPHINSCHEDULER_BIN}/dolphinscheduler-daemon.sh stop api-server
  87. ${DOLPHINSCHEDULER_BIN}/dolphinscheduler-daemon.sh start api-server
  88. }
  89. # start logger-server
  90. initLoggerServer() {
  91. echo "start logger-server"
  92. ${DOLPHINSCHEDULER_BIN}/dolphinscheduler-daemon.sh stop logger-server
  93. ${DOLPHINSCHEDULER_BIN}/dolphinscheduler-daemon.sh start logger-server
  94. }
  95. # start alert-server
  96. initAlertServer() {
  97. echo "start alert-server"
  98. ${DOLPHINSCHEDULER_BIN}/dolphinscheduler-daemon.sh stop alert-server
  99. ${DOLPHINSCHEDULER_BIN}/dolphinscheduler-daemon.sh start alert-server
  100. }
  101. # print usage
  102. printUsage() {
  103. echo -e "Dolphin Scheduler is a distributed and easy-to-expand visual DAG workflow scheduling system,"
  104. echo -e "dedicated to solving the complex dependencies in data processing, making the scheduling system out of the box for data processing.\n"
  105. echo -e "Usage: [ all | master-server | worker-server | api-server | alert-server | frontend ]\n"
  106. printf "%-13s: %s\n" "all" "Run master-server, worker-server, api-server, alert-server and frontend."
  107. printf "%-13s: %s\n" "master-server" "MasterServer is mainly responsible for DAG task split, task submission monitoring."
  108. printf "%-13s: %s\n" "worker-server" "WorkerServer is mainly responsible for task execution and providing log services.."
  109. printf "%-13s: %s\n" "api-server" "ApiServer is mainly responsible for processing requests from the front-end UI layer."
  110. printf "%-13s: %s\n" "alert-server" "AlertServer mainly include Alarms."
  111. printf "%-13s: %s\n" "frontend" "Frontend mainly provides various visual operation interfaces of the system."
  112. }
  113. # init config file
  114. source /root/startup-init-conf.sh
  115. LOGFILE=/var/log/nginx/access.log
  116. case "$1" in
  117. (all)
  118. initZK
  119. initDatabase
  120. initMasterServer
  121. initWorkerServer
  122. initApiServer
  123. initAlertServer
  124. initLoggerServer
  125. initNginx
  126. LOGFILE=/var/log/nginx/access.log
  127. ;;
  128. (master-server)
  129. initZK
  130. initDatabase
  131. initMasterServer
  132. LOGFILE=${DOLPHINSCHEDULER_LOGS}/dolphinscheduler-master.log
  133. ;;
  134. (worker-server)
  135. initZK
  136. initDatabase
  137. initWorkerServer
  138. initLoggerServer
  139. LOGFILE=${DOLPHINSCHEDULER_LOGS}/dolphinscheduler-worker.log
  140. ;;
  141. (api-server)
  142. initZK
  143. initDatabase
  144. initApiServer
  145. LOGFILE=${DOLPHINSCHEDULER_LOGS}/dolphinscheduler-api-server.log
  146. ;;
  147. (alert-server)
  148. initDatabase
  149. initAlertServer
  150. LOGFILE=${DOLPHINSCHEDULER_LOGS}/dolphinscheduler-alert.log
  151. ;;
  152. (frontend)
  153. initNginx
  154. LOGFILE=/var/log/nginx/access.log
  155. ;;
  156. (help)
  157. printUsage
  158. exit 1
  159. ;;
  160. (*)
  161. printUsage
  162. exit 1
  163. ;;
  164. esac
  165. # init directories and log files
  166. mkdir -p ${DOLPHINSCHEDULER_LOGS} && mkdir -p /var/log/nginx/ && cat /dev/null >> ${LOGFILE}
  167. echo "tail begin"
  168. exec bash -c "tail -n 1 -f ${LOGFILE}"