Linux启动项目脚本

前置条件

  1. 在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

#判断传进来的第二个参数, 即jar包路径
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

#获取jar包文件名
SERVER=$(basename $2 .jar)

#获取jar包目录路径
BASE_DIR=$(dirname $2)

#如果路径是当前目录
if [ "$BASE_DIR" == "." ]; then
  #获取pwd路径
  BASE_DIR=$(pwd)
fi

#建立日志目录
if [ ! -d "${BASE_DIR}/logs" ]; then
  mkdir ${BASE_DIR}/logs
fi

#如果该服务在运行中, 则获取PID
PID=$(ps -ef | grep java | grep ${SERVER}.jar | awk '{print $2}')

start() {
  
  #判断pid对应的进程, 不存在则为true, 存在则为false
  if ! kill -0 ${PID} 2>/dev/null; then
    #JDK环境变量
    [ ! -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

    #if [ "$PID" ] ; then
    #  echo "$SERVER running."
    #  exit -1;
    #fi

    export JAVA_HOME
    export JAVA="$JAVA_HOME/bin/java"
    #===========================================================================================
    # JVM Configuration
    #===========================================================================================
    # JVM虚拟机配置
    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"

    #自定义外部配置文件启动
    #export CUSTOM_CONFIG_LOCATIONS=file:${BASE_DIR}/application.yml
    #JAVA_OPT="${JAVA_OPT} --spring.config.location=${CUSTOM_CONFIG_LOCATIONS}"

    #输出执行命令
    #echo "$JAVA ${JAVA_OPT}"

    # start
    #nohup $JAVA ${JAVA_OPT} grape.service >/dev/null 2>&1 &
    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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值