#!/bin/bash # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you 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. # project name SERVER_NAME="${project.artifactId}" # jar file name JAR_NAME="${project.build.finalName}.jar" # cd bin dir cd `dirname $0` # bin dir BIN_DIR=`pwd` # return root dir cd .. # root path dir DEPLOY_DIR=`pwd` # config dir # absolute directory of external configuration files, if it is a directory, it should end with '/',you can also directly specify a file. # if a directory is specified, spring will read all configuration files in the directory CONF_DIR=$DEPLOY_DIR/config # server port SERVER_PORT=1157 PIDS=`ps -ef | grep java | grep "$CONF_DIR" | awk '{print $2}'` if [ "$1" = "status" ]; then if [ -n "$PIDS" ]; then echo "The HertzBeat $SERVER_NAME is running...!" echo "PID: $PIDS" exit 0 else echo "The HertzBeat $SERVER_NAME is stopped" exit 0 fi fi if [ -n "$PIDS" ]; then echo "ERROR: The HertzBeat $SERVER_NAME already started!" echo "PID: $PIDS" exit 1 fi if [ -n "$SERVER_PORT" ]; then # linux - find the port whether used SERVER_PORT_COUNT=`netstat -tln | grep :$SERVER_PORT | wc -l` if [ $SERVER_PORT_COUNT -gt 0 ]; then echo "ERROR: netstat the HertzBeat $SERVER_NAME port $SERVER_PORT already used!" exit 1 fi # mac - find the port whether used LSOF_AVA=`command -v lsof | wc -l` if [ $LSOF_AVA -gt 0 ]; then SERVER_PORT_COUNT=`lsof -i:$SERVER_PORT | grep java | wc -l` if [ $SERVER_PORT_COUNT -gt 0 ]; then echo "ERROR: lsof the HertzBeat $SERVER_NAME port $SERVER_PORT already used!" exit 1 fi fi fi MAIN_CLASS="org.apache.hertzbeat.startup.HertzBeatApplication" EXT_LIB_PATH="$DEPLOY_DIR/ext-lib" CLASSPATH="$DEPLOY_DIR/$JAR_NAME:$EXT_LIB_PATH/*" # log dir LOGS_DIR=$DEPLOY_DIR/logs # create logs dir when not exist if [ ! -d $LOGS_DIR ]; then mkdir $LOGS_DIR fi # JVM Configuration JAVA_OPTS=" -Duser.timezone=Asia/Shanghai -Dfile.encoding=UTF-8 -Doracle.jdbc.timezoneAsRegion=false --add-opens=java.base/java.nio=org.apache.arrow.memory.core,ALL-UNNAMED" JAVA_MEM_OPTS=" -server -XX:SurvivorRatio=6 -XX:+UseParallelGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$LOGS_DIR" # load logback config LOG_IMPL_FILE=logback-spring.xml LOGGING_CONFIG="" if [ -f "$CONF_DIR/$LOG_IMPL_FILE" ] then LOGGING_CONFIG="-Dlogging.config=$CONF_DIR/$LOG_IMPL_FILE" fi CONFIG_FILES=" -Dlogging.path=$LOGS_DIR $LOGGING_CONFIG -Dspring.config.location=$CONF_DIR/ " echo -e "You can review logs at hertzbeat/logs" echo -e "Starting the HertzBeat $SERVER_NAME ..." if [ -f "./java/bin/java" ]; then echo -e "Use the inner package jdk to start" nohup ./java/bin/java $JAVA_OPTS $JAVA_MEM_OPTS $CONFIG_FILES -cp $CLASSPATH $MAIN_CLASS >logs/startup.log 2>&1 & else JAVA_EXIST=`which java | grep bin | wc -l` if [ $JAVA_EXIST -le 0 ]; then echo -e "ERROR: there is no java${java.version}+ environment, please config java environment." exit 1 fi echo -e "Use the system environment jdk to start" nohup java $JAVA_OPTS $JAVA_MEM_OPTS $CONFIG_FILES -cp $CLASSPATH $MAIN_CLASS >logs/startup.log 2>&1 & fi COUNT=0 while [ $COUNT -lt 1 ]; do echo "... " sleep 1 if [ -n "$SERVER_PORT" ]; then COUNT=`netstat -an | grep $SERVER_PORT | wc -l` else COUNT=`ps -f | grep java | grep "$DEPLOY_DIR" | awk '{print $2}' | wc -l` fi if [ $COUNT -gt 0 ]; then break fi done echo "Service Start Success!" PIDS=`ps -f | grep java | grep "$DEPLOY_DIR" | awk '{print $2}'` echo "Service PID: $PIDS"