seata-server.sh 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. #!/bin/bash
  2. # Copyright 1999-2019 Seata.io Group.
  3. #
  4. # Licensed under the Apache License, Version 2.0 (the "License");
  5. # you may not use this file except in compliance with the License.
  6. # You may obtain a copy of the License at
  7. #
  8. # http://www.apache.org/licenses/LICENSE-2.0
  9. #
  10. # Unless required by applicable law or agreed to in writing, software
  11. # distributed under the License is distributed on an "AS IS" BASIS,
  12. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. # See the License for the specific language governing permissions and
  14. # limitations under the License.
  15. # resolve links - $0 may be a softlink
  16. PRG="$0"
  17. while [ -h "$PRG" ]; do
  18. ls=`ls -ld "$PRG"`
  19. link=`expr "$ls" : '.*-> \(.*\)$'`
  20. if expr "$link" : '/.*' > /dev/null; then
  21. PRG="$link"
  22. else
  23. PRG=`dirname "$PRG"`/"$link"
  24. fi
  25. done
  26. PRGDIR=`dirname "$PRG"`
  27. BASEDIR=`cd "$PRGDIR/.." >/dev/null; pwd`
  28. # Reset the REPO variable. If you need to influence this use the environment setup file.
  29. REPO=
  30. # OS specific support. $var _must_ be set to either true or false.
  31. cygwin=false;
  32. darwin=false;
  33. case "`uname`" in
  34. CYGWIN*) cygwin=true ;;
  35. Darwin*) darwin=true
  36. if [ -z "$JAVA_VERSION" ] ; then
  37. JAVA_VERSION="CurrentJDK"
  38. else
  39. echo "Using Java version: $JAVA_VERSION"
  40. fi
  41. if [ -z "$JAVA_HOME" ]; then
  42. if [ -x "/usr/libexec/java_home" ]; then
  43. JAVA_HOME=`/usr/libexec/java_home`
  44. else
  45. JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/${JAVA_VERSION}/Home
  46. fi
  47. fi
  48. ;;
  49. esac
  50. if [ -z "$JAVA_HOME" ] ; then
  51. if [ -r /etc/gentoo-release ] ; then
  52. JAVA_HOME=`java-config --jre-home`
  53. fi
  54. fi
  55. # For Cygwin, ensure paths are in UNIX format before anything is touched
  56. if $cygwin ; then
  57. [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
  58. [ -n "$CLASSPATH" ] && CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
  59. fi
  60. # If a specific java binary isn't specified search for the standard 'java' binary
  61. if [ -z "$JAVACMD" ] ; then
  62. if [ -n "$JAVA_HOME" ] ; then
  63. if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
  64. # IBM's JDK on AIX uses strange locations for the executables
  65. JAVACMD="$JAVA_HOME/jre/sh/java"
  66. else
  67. JAVACMD="$JAVA_HOME/bin/java"
  68. fi
  69. else
  70. JAVACMD=`which java`
  71. fi
  72. fi
  73. if [ ! -x "$JAVACMD" ] ; then
  74. echo "Error: JAVA_HOME is not defined correctly." 1>&2
  75. echo " We cannot execute $JAVACMD" 1>&2
  76. exit 1
  77. fi
  78. if [ -z "$REPO" ]
  79. then
  80. REPO="$BASEDIR"/lib
  81. fi
  82. CLASSPATH="$BASEDIR"/conf:"$REPO"/*
  83. ENDORSED_DIR=
  84. if [ -n "$ENDORSED_DIR" ] ; then
  85. CLASSPATH=$BASEDIR/$ENDORSED_DIR/*:$CLASSPATH
  86. fi
  87. if [ -n "$CLASSPATH_PREFIX" ] ; then
  88. CLASSPATH=$CLASSPATH_PREFIX:$CLASSPATH
  89. fi
  90. # For Cygwin, switch paths to Windows format before running java
  91. if $cygwin; then
  92. [ -n "$CLASSPATH" ] && CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
  93. [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
  94. [ -n "$HOME" ] && HOME=`cygpath --path --windows "$HOME"`
  95. [ -n "$BASEDIR" ] && BASEDIR=`cygpath --path --windows "$BASEDIR"`
  96. [ -n "$REPO" ] && REPO=`cygpath --path --windows "$REPO"`
  97. fi
  98. if [ "$SKYWALKING_ENABLE" = "true" ]; then
  99. SKYWALKING_OPTS="-javaagent:${BASEDIR}/ext/apm-skywalking/skywalking-agent.jar -Dskywalking_config=${BASEDIR}/ext/apm-skywalking/config/agent.config -Dskywalking.logging.dir=${BASEDIR}/logs"
  100. JAVA_OPT="${JAVA_OPT} $SKYWALKING_OPTS"
  101. echo "apm-skywalking enabled opts: $SKYWALKING_OPTS"
  102. else
  103. echo "apm-skywalking not enabled"
  104. fi
  105. JVM_XMX=$JVM_XMX
  106. JVM_XMS=$JVM_XMS
  107. JVM_XMN=$JVM_XMN
  108. JVM_XSS=$JVM_XSS
  109. JVM_MetaspaceSize=$JVM_MetaspaceSize
  110. JVM_MaxMetaspaceSize=$JVM_MaxMetaspaceSize
  111. JVM_MaxDirectMemorySize=$JVM_MaxDirectMemorySize
  112. LOADER_PATH=$LOADER_PATH
  113. JAVA_OPT="${JAVA_OPT} -server -Dloader.path=${LOADER_PATH:="$BASEDIR/lib"} -Xmx${JVM_XMX:="2048m"} -Xms${JVM_XMS:="2048m"} -Xmn${JVM_XMN:="1024m"} -Xss${JVM_XSS:="512k"} -XX:SurvivorRatio=10 -XX:MetaspaceSize=${JVM_MetaspaceSize:="128m"} -XX:MaxMetaspaceSize=${JVM_MaxMetaspaceSize:="256m"} -XX:MaxDirectMemorySize=${JVM_MaxDirectMemorySize:=1024m} -XX:-OmitStackTraceInFastThrow -XX:-UseAdaptiveSizePolicy"
  114. JAVA_OPT="${JAVA_OPT} -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASEDIR}/logs/java_heapdump.hprof -XX:+DisableExplicitGC"
  115. JAVA_MAJOR_VERSION=$($JAVACMD -version 2>&1 | sed '1!d' | sed -e 's/"//g' | awk '{print $3}' | awk -F '.' '{print $1}')
  116. if [[ "$JAVA_MAJOR_VERSION" -eq "1" ]] ; then
  117. JAVA_MAJOR_VERSION=$($JAVACMD -version 2>&1 | sed '1!d' | sed -e 's/"//g' | awk '{print $3}' | awk -F '.' '{print $2}')
  118. fi
  119. if [[ "$JAVA_MAJOR_VERSION" -ge "9" ]] ; then
  120. JAVA_OPT="${JAVA_OPT} -Xlog:gc*:file=${BASEDIR}/logs/seata_gc.log:time,tags:filecount=10,filesize=102400"
  121. elif [[ "$JAVA_MAJOR_VERSION" -ge "17" ]] ; then
  122. JAVA_OPT="${JAVA_OPT} -Xlog:gc=trace:file=${BASEDIR}/logs/seata_gc.log:time,tags:filecount=10,filesize=10M"
  123. else
  124. JAVA_OPT="${JAVA_OPT} -Xloggc:${BASEDIR}/logs/seata_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -XX:+UseG1GC"
  125. fi
  126. JAVA_OPT="${JAVA_OPT} -Dio.netty.leakDetectionLevel=advanced"
  127. JAVA_OPT="${JAVA_OPT} -Dapp.name=seata-server -Dapp.pid=${$} -Dapp.home=${BASEDIR} -Dbasedir=${BASEDIR}"
  128. JAVA_OPT="${JAVA_OPT} -Dspring.config.location=${BASEDIR}/conf/application.yml -Dlogging.config=${BASEDIR}/conf/logback-spring.xml"
  129. JAVA_OPT="${JAVA_OPT} -jar ${BASEDIR}/target/seata-server.jar"
  130. if [ ! -x "$BASEDIR"/logs ]; then
  131. mkdir "$BASEDIR"/logs
  132. fi
  133. CMD_LINE_ARGS=$@
  134. # start
  135. echo "$JAVACMD ${JAVA_OPT} ${CMD_LINE_ARGS}" > ${BASEDIR}/logs/start.out 2>&1 &
  136. nohup $JAVACMD ${JAVA_OPT} ${CMD_LINE_ARGS} >> ${BASEDIR}/logs/start.out 2>&1 &
  137. echo "seata-server is starting, you can check the ${BASEDIR}/logs/start.out"