前置条件
- 在linux上配置好JDK
编写shell脚本
#!/bin/bash
error_exit() {
echo -e "\033[31;1m ERROR: $1 !! \033[0m"
exit 1
}
case $1 in
start) ;;
stop) ;;
status) ;;
*)
error_exit "Usage: $0 start|stop|status"
;;
esac
if [ -z $2 ]; then
error_exit "Usage: $0 $1 'filename', Please pass in the path of the jar file"
else
if [ ! -f $2 ]; then
error_exit "$2 Jar file not found, Please pass in the correct jar file path"
fi
fi
SERVER=$(basename $2 .jar)
BASE_DIR=$(dirname $2)
if [ "$BASE_DIR" == "." ]; then
BASE_DIR=$(pwd)
fi
if [ ! -d "${BASE_DIR}/logs" ]; then
mkdir ${BASE_DIR}/logs
fi
PID=$(ps -ef | grep java | grep ${SERVER}.jar | awk '{print $2}')
start() {
if ! kill -0 ${PID} 2>/dev/null; then
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/local/jdk8
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/local/java/jdk
[ ! -e "$JAVA_HOME/bin/java" ] && unset JAVA_HOME
if [ -z "$JAVA_HOME" ]; then
JAVA_PATH=$(dirname $(readlink -f $(which javac)))
if [ "x$JAVA_PATH" != "x" ]; then
export JAVA_HOME=$(dirname $JAVA_PATH 2>/dev/null)
fi
if [ -z "$JAVA_HOME" ]; then
error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better!"
fi
fi
export JAVA_HOME
export JAVA="$JAVA_HOME/bin/java"
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_heapdump.hprof"
JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"
JAVA_OPT="${JAVA_OPT} -jar ${BASE_DIR}/${SERVER}.jar"
nohup $JAVA ${JAVA_OPT} $SERVER >${BASE_DIR}/logs/console.log 2>&1 &
echo -e "\033[32;1m Start '$SERVER' server success \033[0m"
else
echo -e "\033[31;1m Failed to start '${SERVER}' server, Because it is running (pid:${PID}). \033[0m"
fi
}
stop() {
if kill -0 ${PID} 2>/dev/null; then
kill ${PID}
echo -e "\033[33;1m Killed ${SERVER} server \033[0m"
else
echo -e "\033[31;1m Failed to stop ${SERVER} server, It is not running. \033[0m"
fi
}
status() {
if kill -0 ${PID} 2>/dev/null; then
echo -e "\033[32;1m ${SERVER} server (pid:${PID}) is running. \033[0m"
else
echo -e "\033[31;1m ${SERVER} server is not running. \033[0m"
fi
}
case $1 in
start)
start
;;
stop)
stop
;;
status)
status
;;
*)
echo "Usage: $0 start|stop|status"
;;
esac
可以将sh命令软连接至/usr/bin中方便全局操作
ln -s ~/run /usr/bin