startup.sh 6.6 KB

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