start.sh 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. #!/bin/bash
  2. # usage: check/replace/serivce_wait/service_start
  3. cd $(dirname $0)
  4. echo
  5. # version
  6. if [ -f ${APP_HOME}/${APP_NAME}/VERSION ]; then
  7. echo -e "Checking env for ${APP_NAME}..\n`cat ${APP_HOME}/${APP_NAME}/VERSION`"
  8. else
  9. echo "Checking env for ${APP_NAME}.."
  10. fi
  11. # check dir
  12. if [ -d ../conf ]; then
  13. cd ../conf
  14. else
  15. echo "please put conf/ and start.sh to the same directory."
  16. exit 1
  17. fi
  18. # get conf files
  19. CONF_FILES=`find $(pwd) -type f | grep -v "\.svn" | grep -v "\.git"`
  20. # if no config file exists
  21. if [ -z "$CONF_FILES" ]; then
  22. echo "No conf files found, pass."
  23. fi
  24. # has config file
  25. for f in $CONF_FILES; do
  26. # metadata => "<location:LOCATION_OF_FILE> [MODE:600] [OWNER:USERNAME]"
  27. # if there is " " " in value, use "\" to escape
  28. # use "${APP_HOME}/${APP_NAME}" to module home
  29. # get the location of metadata
  30. METADATA_LOCATION=$(grep -iw metadata $f | awk -F'=>' '{print $2}' | \
  31. awk -F'location:' '{print $2}' | sed -n '1p' | \
  32. awk '{print $1}' | tr -d ',;"' | tr -d "'")
  33. # replace the variable to true path
  34. METADATA_LOCATION=`eval echo $METADATA_LOCATION`
  35. # there is no location tag of metadata
  36. if [ -z "$METADATA_LOCATION" ]; then
  37. echo "\"location\" of metadata in \"$f\" not define!"
  38. check_passed="$check_passed false"
  39. continue
  40. else
  41. if `dirname $METADATA_LOCATION &>/dev/null`; then
  42. if ! [ -d "$(dirname $METADATA_LOCATION)" ]; then
  43. echo "mkdir -p $(dirname $METADATA_LOCATION)"
  44. mkdir -p $(dirname $METADATA_LOCATION)
  45. fi
  46. else
  47. echo "\"location\" of metadata in \"$f\" not PATH format!"
  48. check_passed="$check_passed false"
  49. continue
  50. fi
  51. dockerize_template="${dockerize_template} -template ${f}:${METADATA_LOCATION}"
  52. fi
  53. # has location but no {{ VAR }}
  54. VAR_IN_BRACE=$(grep {{.*}} $f | sed -n 's/.*{{ *\(.*\) *}}.*/\1/p')
  55. if [ -z "$VAR_IN_BRACE" ]; then
  56. echo "skip \"${f}\" without replacing, pass."
  57. continue
  58. # has location and {{ VAR }}
  59. else
  60. # loop to check
  61. for i in $VAR_IN_BRACE; do
  62. VAR_TO_CHECK=${i##.Env.}
  63. VAR_TO_CHECK=`echo $VAR_TO_CHECK`
  64. # Check the value
  65. if [ -z "${!VAR_TO_CHECK}" ]; then
  66. echo "Can not get env: \"${VAR_TO_CHECK}\" in file: \"$f\" !"
  67. check_passed="$check_passed false"
  68. else
  69. echo "|- ${VAR_TO_CHECK}=${!VAR_TO_CHECK}"
  70. fi
  71. done
  72. fi
  73. done
  74. # if error, exit
  75. if echo $check_passed | grep -wq "false"; then
  76. echo
  77. echo "To inject variables to container, you can do it in:"
  78. echo " 1. Dockerfile"
  79. echo " 2. compose file (recommand)"
  80. echo " 3. docker run with \"-e\" option"
  81. echo "And you can receive value with \"{{ .Env.VARIABLE_NAME }}\" in config file."
  82. echo
  83. exit 1
  84. else
  85. echo "Env check pass."
  86. echo
  87. fi
  88. # get dependice
  89. for i in ${!APP_DEP*}; do
  90. dockerize_wait="${dockerize_wait} -wait ${!i}"
  91. done
  92. # replace¡¢Serivce Wait
  93. echo -n "Pre-starting.."
  94. dockerize \
  95. ${dockerize_template} \
  96. ${dockerize_wait} -timeout 120s \
  97. -stdout /var/log/${APP_NAME}.log \
  98. -stderr /var/log/${APP_NAME}.log \
  99. echo "done"
  100. echo
  101. # start, important
  102. Service_Start() {
  103. echo "Starting ${APP_NAME}.."
  104. ####### START COMMAND HERE #########
  105. set -e
  106. start_${APP_NAME} && \
  107. echo "success" && \
  108. tail -f /var/log/${APP_NAME}.log
  109. ####################################
  110. }
  111. # default: start the service
  112. Service_Start