springboot项目jar包启动脚本

         当工具用习惯了。也就懒的去关心底层的东西了。项目部署的时候,用习惯了jenkins也就不关心运维写的脚本了。但是当工具出问题,那就要从最基础的脚本来部署项目。脚本我也不太懂,在这里只是与大家一起分享启动和关闭的两个脚本,大神请绕路。

      注:springboot项目,jar包部署,main类启动项目。脚本有很多,只要懂的原理,都能写出来,仅供参考,没有注释,相关标签知识自己补吧。

1.启动脚本

#!/bin/sh
JAVA_OPTS=""
CLASSPATH=""
CATALINA_OPTS=""
PRG="$0"

RUN_USER="root"
PID_FILE="/data/sbc/项目名/tomcat.pid"

current_user=`whoami`
if [ "$current_user" != "$RUN_USER" ];then
  echo "please run $0 as user $RUN_USER" 1>&2
  exit 1
fi

# resolve links - $0 may be a softlink
while [ -h "$PRG" ]; do
  ls=`ls -ld "$PRG"`
  link=`expr "$ls" : '.*-> \(.*\)$'`
  if expr "$link" : '/.*' > /dev/null; then
    PRG="$link"
  else
    PRG=`dirname "$PRG"`/"$link"
  fi
done

# Get standard environment variables
PRGDIR=`dirname "$PRG"`
APP_HOME=`cd "$PRGDIR/.." >/dev/null; pwd`

SPRINGBOOT_OUT="$APP_HOME"/log/springboot.out

# set JAVA_OPTS
ENV_CONF="$APP_HOME"/conf/env.conf
if [ -f $ENV_CONF ];then
   JAVA_OPTS=`sed 's/"//g' $ENV_CONF | awk '/^[^#]/' | tr "\n" ' '`
fi

# set CLASSPATH
if [ -d "$APP_HOME"/lib ];then
  for lib_jar in `ls "$APP_HOME/lib"`;do
     CLASSPATH="$APP_HOME"/lib/"$lib_jar":"$CLASSPATH"
  done
fi

# User can set environment in setenv.sh
if [ -r "$APP_HOME/bin/setenv.sh" ]; then
  . "$APP_HOME/bin/setenv.sh"
fi

echo "Using JAVA_HOME:  $JAVA_HOME"
echo "Using APP_HOME:   $APP_HOME"
if [ ! -z "$CLASSPATH" ];then
  echo "Using CLASSPATH:  $CLASSPATH"
fi

if [ ! -z "$PID_FILE" ]; then
  echo "Using PID_FILE:   $PID_FILE"
fi

if [ ! -z "$PID_FILE" ]; then
  if [ -f "$PID_FILE" ]; then
    if [ -s "$PID_FILE" ]; then
      echo "Existing PID file found during start."
      if [ -r "$PID_FILE" ]; then
        PID=`cat "$PID_FILE"`
        ps -p $PID >/dev/null 2>&1
        if [ $? -eq 0 ] ; then
          echo "Server appears to still be running with PID $PID. Start aborted."
          exit 0
        else
          echo "Removing/clearing stale PID file."
          rm -rf "$PID_FILE" >/dev/null 2>&1
          if [ $? != 0 ]; then
            if [ -w "$PID_FILE" ]; then
              cat /dev/null > "$PID_FILE"
            else
              echo "Unable to remove or clear stale PID file. Start aborted."
              exit 1
            fi
          fi
        fi
      else
        echo "Unable to read PID file. Start aborted."
        exit 1
      fi
    else
      rm -rf "$PID_FILE" >/dev/null 2>&1
      if [ $? != 0 ]; then
        if [ ! -w "$PID_FILE" ]; then
          echo "Unable to remove or write to empty PID file. Start aborted."
          exit 1
        fi
      fi
    fi
  fi
fi

# Add server.jar to classpath, if CLASSPATH is not blank, it must be endswith ":"
CLASSPATH="$CLASSPATH""$APP_HOME"/bin/server.jar

cat /dev/null > ${SPRINGBOOT_OUT}

${JAVA_HOME}/bin/java $JAVA_OPTS -classpath $CLASSPATH org.springframework.boot.loader.JarLauncher >> $SPRINGBOOT_OUT 2>&1 &
if [ ! -z "$PID_FILE" ]; then
  echo $! > "$PID_FILE"
fi

echo "springboot server started."

2.关闭脚本

 

#/bin/sh

RUN_USER="root"
PID_FILE="/data/sbc/项目名/tomcat.pid"
SHUTDOWN_PORT="8411"

current_user=`whoami`
if [ "$current_user" != "$RUN_USER" ];then
  echo "please run $0 as user $RUN_USER"
  exit 1
fi

if [ ! -f "$PID_FILE" ];then
  echo "pid file $PID_FILE not exist, please check if server running, stop aborted."
  exit 1
fi

netstat -an | grep LISTEN | grep -w $SHUTDOWN_PORT
if [[ $? -eq 0 ]]; then
  shut_info=`curl --connect-timeout 10 -m 30 -XPOST http://127.0.0.1:"$SHUTDOWN_PORT"/shutdown.json`
  echo "shutdown info: $shut_info ,result code: $?"
fi

pid=`cat $PID_FILE`
for num in 1 2 3 4 5 6 7 8 9 10
do
  echo "stop times: $num"
  still_alive=`ps -ef | awk '$2 ~ /^'$pid'$/{print $2}'`
  if [ ! -z "$still_alive" ];then
    kill $pid
    sleep 1
  else
    break
  fi
done

still_alive=`ps -ef | awk '$2 ~ /^'$pid'$/{print $2}'`
if [ ! -z "$still_alive" ];then
  kill -9 $pid
fi

rm -rf $PID_FILE
exit 0

再补充一种nohup java 方式的简单启动脚本

#!/bin/bash
#这里可替换为你自己的执行程序,其他代码无需更改
APP_NAME=myApplication.jar
 
#使用说明,用来提示输入参数
usage() {
    echo "Usage: sh start.sh [start|stop|restart|status]"
    exit 1
}
 
#检查程序是否在运行
is_exist() { 
    pid=`ps -ef | grep $APP_NAME | grep -v grep | awk '{print $2}' `
    #如果不存在返回1,存在返回0
    if [ -z "${pid}" ]; then
      return 1
    else
      return 0
    fi
}
 
#启动方法
start() {
   is_exist
   if [ $? -eq "0" ]; then
     echo "${APP_NAME} is already running. pid=${pid} ."
   else
     nohup java -jar $APP_NAME --server.port=83> /dev/null 2>&1 &
   fi
}
 
#停止方法
stop() {
   is_exist
   if [ $? -eq "0" ]; then
     kill -9 $pid
   else
     echo "${APP_NAME} is not running"
   fi
}
 
#输出运行状态
status() {
   is_exist
   if [ $? -eq "0" ]; then
     echo "${APP_NAME} is running. Pid is ${pid}"
   else
     echo "${APP_NAME} is not running."
   fi
}
 
#重启
restart() {
   stop
   start
}
 
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
   "start")
     start
     ;;
   "stop")
     stop
     ;;
   "status")
     status
     ;;
   "restart")
     restart
     ;;
   *)
     usage
     ;;
esac

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值