#!/bin/bash # Copyright 1999-2024 Alibaba Group Holding Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. #=========================================================================================== # Setting system properties #=========================================================================================== MODE="cluster" BASE_DIR="/opt/nacos" CUSTOM_SEARCH_LOCATIONS="file:${BASE_DIR}/conf/" if [ -f "${BASE_DIR}/target/nacos-server.jar" ]; then NACOS_TYPE="Java" NACOS_SERVER="${BASE_DIR}/target/nacos-server.jar" elif [ -x "${BASE_DIR}/target/nacos-server" ]; then NACOS_TYPE="Native" NACOS_SERVER="${BASE_DIR}/target/nacos-server" else echo "Nacos server application doesn't exist in ${BASE_DIR}/target" exit -1 fi while getopts ":m:" opt; do case $opt in m) MODE=$OPTARG ;; *) echo "Unknown parameter" exit 1 ;; esac done #=========================================================================================== # Setting start log #=========================================================================================== if [ ! -f "${BASE_DIR}/logs/start.out" ]; then touch "${BASE_DIR}/logs/start.out" fi #=========================================================================================== # Setting application properties #=========================================================================================== RUN_CMD="-Dnacos.home=${BASE_DIR}" RUN_CMD="${RUN_CMD} -Dnacos.member.list=" RUN_CMD="${RUN_CMD} -Dnacos.preferHostnameOverIp=true" ### If use standalone mode: if [ "${MODE}" = "standalone" ]; then RUN_CMD="${RUN_CMD} -Dnacos.standalone=true" fi if [ "${NACOS_TYPE}" = "Java" ]; then ### Define JAVA_HOME, JAVA_PATH and JAVA [ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java [ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java [ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/opt/taobao/java [ ! -e "$JAVA_HOME/bin/java" ] && unset JAVA_HOME if [ -z "$JAVA_HOME" ]; then if $darwin; then if [ -x '/usr/libexec/java_home' ] ; then export JAVA_HOME=`/usr/libexec/java_home` elif [ -d "/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home" ]; then export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home" fi else JAVA_PATH=`dirname $(readlink -f $(which javac))` if [ "x$JAVA_PATH" != "x" ]; then export JAVA_HOME=`dirname $JAVA_PATH 2>/dev/null` fi fi if [ -z "$JAVA_HOME" ]; then JAVA_PATH=$(which java) if [ -z "$JAVA_PATH" ]; then error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better!" fi JAVA_HOME=$(dirname "$JAVA_PATH")/.. export JAVA_HOME=$(cd "$JAVA_HOME" && pwd) fi fi export JAVA_HOME export JAVA="$JAVA_HOME/bin/java" ### Define gc log rule JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([0-9]*).*$/\1/p') if [ "$JAVA_MAJOR_VERSION" -ge "9" ]; then RUN_CMD="${RUN_CMD} -Xlog:gc*:file=${BASE_DIR}/logs/nacos_gc.log:time,tags:filecount=10,filesize=102400" RUN_CMD="${RUN_CMD} --add-opens=java.base/java.lang=ALL-UNNAMED" RUN_CMD="${RUN_CMD} --add-opens=java.base/java.lang.reflect=ALL-UNNAMED" RUN_CMD="${RUN_CMD} --add-opens=java.base/java.util=ALL-UNNAMED" else JAVA_OPT_EXT_FIX="-Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${JAVA_HOME}/lib/ext" RUN_CMD="${RUN_CMD} -Xloggc:${BASE_DIR}/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M" fi if [ "${MODE}" = "standalone" ]; then RUN_CMD="${RUN_CMD} -Xms512m -Xmx512m -Xmn256m" else RUN_CMD="${RUN_CMD} -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m" fi RUN_CMD="${RUN_CMD} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_heapdump.hprof" RUN_CMD="${RUN_CMD} -XX:-UseLargePages" RUN_CMD="${RUN_CMD} -jar ${NACOS_SERVER}" RUN_CMD="${RUN_CMD} --server.max-http-header-size=524288" if [ "$JAVA_OPT_EXT_FIX" = "" ]; then RUN_CMD="${JAVA} ${RUN_CMD}" else RUN_CMD="${JAVA} ${JAVA_OPT_EXT_FIX} ${RUN_CMD}" fi elif [ "${NACOS_TYPE}" = "Native" ]; then RUN_CMD="${NACOS_SERVER} ${RUN_CMD}" fi RUN_CMD="${RUN_CMD} --logging.config=${BASE_DIR}/conf/nacos-logback.xml" RUN_CMD="${RUN_CMD} --spring.config.additional-location=${CUSTOM_SEARCH_LOCATIONS}" #=========================================================================================== # Start application #=========================================================================================== echo "${RUN_CMD} nacos.nacos" > ${BASE_DIR}/logs/start.out 2>&1 & echo "${NACOS_TYPE} Nacos is now starting with ${MODE} mode, checkout ${BASE_DIR}/logs/start.out for more information." nohup ${RUN_CMD} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 &