# Linux脚本文件

启动当前目录下.jar文件脚本

#! /bin/sh

cd `dirname $0`

CUR_SHELL_DIR=`pwd`

JAR_NAME=""
JAR_FILE=$(ls ${CUR_SHELL_DIR})
for fileName in ${JAR_FILE}
do
	if [[ ${fileName} == *.jar ]]; then
		JAR_NAME=${fileName}
	fi
done

if [[ ${JAR_NAME} == "" ]];then
	echo "Error: Not found jar package"
	exit 1
fi

JAR_PATH=${CUR_SHELL_DIR}/${JAR_NAME}
JAVA_MEM_OPTS=" -server -Xms512m -Xmx512m -XX:+HeapDumpOnOutOfMemoryError"
CUR_EVN="prod"

function echo_help()
{
	echo -e "syntax: sh start.sh start|stop|restart|status  dev|prod|zprod"
}

## start application
function appStart()
{
	if [ -z $1 ];then
		echo -e "Syntax: use default spring profile: prod"
	else
	   echo -e "Syntax: use spring profile: $1"
	   CUR_EVN="$1"
	fi

	SPRING_PROFILES_ACTIV="-Dspring.profiles.active=$CUR_EVN"

	# check server
	PIDS=`ps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'`
	if [ -n "$PIDS" ]; then
		echo -e "ERROR: The $JAR_NAME already started and the PID is ${PIDS}."
		exit 1
	fi

	echo "Starting the $JAR_NAME..."
	# start
	# docker environment check
	dockerenv=`ls /.dockerenv`
	if [ -z "$dockerenv" ];then
		echo "not docker environment, use nohup command to start app."
		nohup java $JAVA_MEM_OPTS -jar $SPRING_PROFILES_ACTIV $JAR_PATH >> /dev/null 2>&1 &
	else
		echo "it's docker environment, use java command to start app."
		java $JAVA_MEM_OPTS -jar $SPRING_PROFILES_ACTIV $JAR_PATH
	fi

	COUNT=0
	while [ $COUNT -lt 1 ]; do
		sleep 1
		COUNT=`ps  --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}' | wc -l`
		if [ $COUNT -gt 0 ]; then
			break
		fi
	done
	PIDS=`ps  --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'`
	echo "${JAR_NAME} Started and the PID is ${PIDS}."
	echo "You can check the log file in ${LOG_PATH} for details."
}

## stop application
function appStop()
{
	PIDS=`ps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'`
	if [ -z "$PIDS" ]; then
		echo "ERROR:The $JAR_NAME does not started!"
		exit 1
	fi

	echo -e "Stopping the $JAR_NAME..."

	for PID in $PIDS; do
		kill $PID > /dev/null 2>&1
	done

	COUNT=0
	while [ $COUNT -lt 1 ]; do
		sleep 1
		COUNT=1
		for PID in $PIDS ; do
			PID_EXIST=`ps --no-heading -p $PID`
			if [ -n "$PID_EXIST" ]; then
				COUNT=0
				break
			fi
		done
	done

	echo -e "${JAR_NAME} Stopped and the PID is ${PIDS}."
}

## look up application status
function appStatus()
{
	PIDS=`ps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'`
	if [ -z "$PIDS" ]; then
		echo "Syntax: $JAR_NAME is stop."
		exit 1
	else
		echo "Syntax: $JAR_NAME is running, process id: $PIDS"
	fi
}

## restart application
function appRestart()
{
	PIDS=`ps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'`
	if [ -z "$PIDS" ]; then
		echo "Syntax:The $JAR_NAME does not started!"
	else
		for PID in $PIDS; do
			kill $PID > /dev/null 2>&1
		done

		COUNT=0
		while [ $COUNT -lt 1 ]; do
			sleep 1
			COUNT=1
			for PID in $PIDS ; do
				PID_EXIST=`ps --no-heading -p $PID`
				if [ -n "$PID_EXIST" ]; then
					COUNT=0
					break
				fi
			done
		done
	fi

	appStart $1
}

if [ -z $1 ];then
	echo_help
	exit 1
elif [ "$1" == "start" ];then
	appStart $2
elif [ "$1" == "stop" ];then
	appStop
elif [ "$1" == "restart" ];then
	appRestart $2
elif [ "$1" == "status" ];then
	appStatus $2
else
	echo_help
	exit 1
fi	
上次更新: 2020-03-17 18:18:16