app_admin.sh 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. #!/bin/bash
  2. set +e
  3. source /etc/profile
  4. export JAVA_HOME=/usr/java/latest
  5. export PATH=$JAVA_HOME/bin:$PATH
  6. touch /tmp/start.log
  7. chown admin: /tmp/start.log
  8. chown -R admin: /home/admin/canal-admin
  9. host=`hostname -i`
  10. MYSQL_USER_PASSWORD=`perl -le 'print $ENV{"spring.datasource.password"}'`
  11. MYSQL_USER=`perl -le 'print $ENV{"spring.datasource.username"}'`
  12. MYSQL_DATABASE=`perl -le 'print $ENV{"spring.datasource.database"}'`
  13. MYSQL_ADDRESS=`perl -le 'print $ENV{"spring.datasource.address"}'`
  14. if [ -z "${MYSQL_USER_PASSWORD}" ]; then
  15. MYSQL_USER_PASSWORD="canal"
  16. fi
  17. if [ -z "${MYSQL_USER}" ]; then
  18. MYSQL_USER="canal"
  19. fi
  20. if [ -z "${MYSQL_DATABASE}" ]; then
  21. MYSQL_DATABASE="canal_manager"
  22. fi
  23. # waitterm
  24. # wait TERM/INT signal.
  25. # see: http://veithen.github.io/2014/11/16/sigterm-propagation.html
  26. waitterm() {
  27. local PID
  28. # any process to block
  29. tail -f /dev/null &
  30. PID="$!"
  31. # setup trap, could do nothing, or just kill the blocker
  32. trap "kill -TERM ${PID}" TERM INT
  33. # wait for signal, ignore wait exit code
  34. wait "${PID}" || true
  35. # clear trap
  36. trap - TERM INT
  37. # wait blocker, ignore blocker exit code
  38. wait "${PID}" 2>/dev/null || true
  39. }
  40. # waittermpid "${PIDFILE}".
  41. # monitor process by pidfile && wait TERM/INT signal.
  42. # if the process disappeared, return 1, means exit with ERROR.
  43. # if TERM or INT signal received, return 0, means OK to exit.
  44. waittermpid() {
  45. local PIDFILE PID do_run error
  46. PIDFILE="${1?}"
  47. do_run=true
  48. error=0
  49. trap "do_run=false" TERM INT
  50. while "${do_run}" ; do
  51. PID="$(cat "${PIDFILE}")"
  52. if ! ps -p "${PID}" >/dev/null 2>&1 ; then
  53. do_run=false
  54. error=1
  55. else
  56. sleep 1
  57. fi
  58. done
  59. trap - TERM INT
  60. return "${error}"
  61. }
  62. function checkStart() {
  63. local name=$1
  64. local cmd=$2
  65. local timeout=$3
  66. cost=5
  67. while [ $timeout -gt 0 ]; do
  68. ST=`eval $cmd`
  69. if [ "$ST" == "0" ]; then
  70. sleep 1
  71. let timeout=timeout-1
  72. let cost=cost+1
  73. elif [ "$ST" == "" ]; then
  74. sleep 1
  75. let timeout=timeout-1
  76. let cost=cost+1
  77. else
  78. break
  79. fi
  80. done
  81. echo "start $name successful"
  82. }
  83. function start_mysql() {
  84. echo "start mysql ..."
  85. # start mysql
  86. MYSQL_ROOT_PASSWORD=Hello1234
  87. # connect local mysql
  88. if [ -z "$(ls -A /var/lib/mysql)" ]; then
  89. TEMP_FILE='/tmp/init.sql'
  90. echo "ALTER USER 'root'@'localhost' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}';" >> $TEMP_FILE
  91. /usr/sbin/mysqld --initialize --user=mysql --datadir=/var/lib/mysql --init-file=/tmp/init.sql --default-authentication-plugin=mysql_native_password 1>>/tmp/start.log 2>&1
  92. echo "default-authentication-plugin=mysql_native_password" >> /etc/my.cnf
  93. # systemctl start mysqld
  94. sudo -u mysql /usr/sbin/mysqld &
  95. sleep 5
  96. checkStart "mysql" "echo 'show status' | mysql -b -s -h127.0.0.1 -P3306 -uroot -p${MYSQL_ROOT_PASSWORD} | grep -c Uptime" 30
  97. # init file
  98. rm -f $TEMP_FILE
  99. echo "create database if not exists $MYSQL_DATABASE ;" >> $TEMP_FILE
  100. echo "create user $MYSQL_USER identified by '$MYSQL_USER_PASSWORD' ;" >> $TEMP_FILE
  101. echo "grant all privileges on $MYSQL_DATABASE.* to '$MYSQL_USER'@'%' ;" >> $TEMP_FILE
  102. echo "flush privileges;" >> $TEMP_FILE
  103. # init user
  104. cmd="mysql -h127.0.0.1 -uroot -p${MYSQL_ROOT_PASSWORD} -e 'source $TEMP_FILE' 1>>/tmp/start.log 2>&1"
  105. eval $cmd
  106. /bin/rm -f /tmp/init.sql
  107. # init table
  108. cmd="mysql -h127.0.0.1 -u$MYSQL_USER -p$MYSQL_USER_PASSWORD $MYSQL_DATABASE -e 'source /home/admin/canal-admin/conf/canal_manager.sql' 1>>/tmp/start.log 2>&1"
  109. eval $cmd
  110. /bin/rm -f /home/admin/canal-admin/conf/canal_manager.sql
  111. else
  112. echo "recover mysql ..."
  113. chown -R mysql:mysql /var/lib/mysql
  114. # systemctl start mysqld
  115. rm -f /var/lib/mysql/mysql.sock.lock
  116. sudo -u mysql /usr/sbin/mysqld &
  117. sleep 5
  118. #check start
  119. checkStart "mysql" "echo 'show status' | mysql -b -s -h127.0.0.1 -P3306 -uroot -p${MYSQL_ROOT_PASSWORD} | grep -c Uptime" 30
  120. fi
  121. }
  122. function stop_mysql() {
  123. echo "stop mysql ..."
  124. # stop mysql
  125. # systemctl stop mysqld
  126. ps auxf | grep mysqld | grep -v grep | awk '{print $2}' | xargs kill
  127. echo "stop mysql successful ..."
  128. }
  129. function start_admin() {
  130. echo "start admin ..."
  131. serverPort=`perl -le 'print $ENV{"server.port"}'`
  132. if [ -z "$serverPort" ] ; then
  133. serverPort=8089
  134. fi
  135. su admin -c 'cd /home/admin/canal-admin/bin/ && sh restart.sh 1>>/tmp/start.log 2>&1'
  136. sleep 5
  137. #check start
  138. checkStart "canal" "nc 127.0.0.1 $serverPort -w 1 -zv 2>/tmp/nc.out && cat /tmp/nc.out | grep -c Connected" 30
  139. }
  140. function stop_admin() {
  141. echo "stop admin"
  142. su admin -c 'cd /home/admin/canal-admin/bin/ && sh stop.sh 1>>/tmp/start.log 2>&1'
  143. echo "stop admin successful ..."
  144. }
  145. echo "==> START ..."
  146. if [ -z "${MYSQL_ADDRESS}" ]; then
  147. start_mysql
  148. fi
  149. start_admin
  150. echo "==> START SUCCESSFUL ..."
  151. tail -f /dev/null &
  152. # wait TERM signal
  153. waitterm
  154. echo "==> STOP"
  155. if [ -z "${MYSQL_ADDRESS}" ]; then
  156. stop_admin
  157. fi
  158. stop_mysql
  159. echo "==> STOP SUCCESSFUL ..."