shell 启动springboot

本shell脚本可以便捷的启动或停止java应用程序包含(spring-boot),且支持重启、停止、查看日志登命令。免去使用kill命令结束进程

# 设置可执行命令 (不设置的话可以使用 sh 执行)
chmod +x ./runjava.sh

使用

./runjava.sh   jar所在路径  start|stop|restart  java程序参数(非必须)
./runjava.sh [xxx.jar] [start|startnolog|stop|restart|status|logshow|run] [springboot参数]
./runjava.sh  /home/xx/a.jar  start|stop|restart|run --spring.profiles.active=prd

start: 启动
startnolog: 启动但不输出日志
stop: 停止
restart: 重启
status: 查看进程状态
logshow: 查看日志
run: 启动并能直接看到输出日志,不用再次使用tail 查看日志

设置日志输出目录

在runjava.sh 统计目录中run.conf文件中配置logdir参数,如果没有run.conf配置文件默认输出到当前目录的logs子文件夹中。

例如启动a.jar spring-boot 应用程序

1. 启动 a.jar

./runjava.sh  /home/xx/a.jar  start --spring.profiles.active=prd

2. 停止 a.jar

./runjava.sh  /home/xx/a.jar  stop

3. 重启 a.jar

./runjava.sh  /home/xx/a.jar  restart

4. 查看 a.jar

./runjava.sh  /home/xx/a.jar  status

5. 查看 a.jar 输出日志

./runjava.sh  /home/xx/a.jar  logshow

runjava.sh

#!/bin/sh
# java env
# author efei
export JAVA_HOME=/home/xefei/java/jdk1.8.0_181
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# s1==jar $2 start|stop|restart|run | $3 --pro prams |
#JAVA_OPTS="-server -Xms400m -Xmx400m -Xmn300m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xverify:none -XX:+DisableExplicitGC -Djava.awt.headless=true"
JAVA_OPTS=" -server -Xms500m -Xmx500m -Xmn350m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -XX:+UseConcMarkSweepGC -XX:+PrintGCDateStamps -XX:+PrintGCDetails -Xloggc:logs/gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=logs/"
# 获取jar名字
JAR_PARAM=$3
JAR_PATH=$1
JAR_NAME=${JAR_PATH##*/}
API_NAME=${JAR_NAME%.jar}

# 获取参数
getpropv() {
  if [ ! -f "run.conf" ]
  then
    echo ''
    return 0
  fi

  if [ "e" != "e${1}" ]
  then
    str=$(grep "${1}" run.conf | cut -d'=' -f2 | sed 's/\r//')
    echo $str
  fi
}

this_dir=$(cd `dirname $0`; pwd)
prov=$(getpropv "logdir")
if [ "X$prov" = "X" ]
then
  log_dir="${this_dir}/logs"
else
  log_dir="${prov}/logs"
fi

if [ ! -d "${log_dir}" ]; then
  mkdir "${log_dir}"
fi

#PID  代表是PID文件
PID=$API_NAME.pid

#使用说明,用来提示输入参数
usage() {
    echo "Usage: sh 执行脚本.sh [xxx.jar] [start|startnolog|stop|restart|status|logshow|run] [springboot参数]"
    exit 1
}
#echo "ps -ef|grep 'java -jar "$JAR_NAME"'|grep -v grep|awk '{print $2}'"
#检查程序是否在运行
is_exist(){
  pid=`ps -ef|grep $JAR_NAME|grep -v grep|grep -v $0|awk '{print $2}' `
  #如果不存在返回1,存在返回0     
  if [ -z "${pid}" ]; then
   return 1
  else
    return 0
  fi
}

#启动方法
start(){
  is_exist
  if [ $? -eq "0" ]; then 
    echo ">>> ${JAR_NAME} is already running PID=${pid} <<<" 
  else 
    nohup java -jar $JAVA_OPTS $JAR_PATH $JAR_PARAM > "$log_dir"/catalina_"$API_NAME".out 2>&1 &
    sleep 1
    echo $! > $PID
    echo ">>> start $JAR_NAME successed PID=$! <<<" 
   fi
}

startnolog(){
  is_exist
  if [ $? -eq "0" ]; then 
    echo ">>> ${JAR_NAME} is already running PID=${pid} <<<" 
  else 
    nohup java -jar $JAVA_OPTS $JAR_PATH $JAR_PARAM > "/dev/null" 2>&1 &
    sleep 1
    echo $! > $PID
    echo ">>> start $JAR_NAME successed PID=$! <<<" 
   fi
}

#停止方法
stop(){
  #is_exist
  if [ ! -f $PID ];then
   echo '>>> PID  is null,maybe is not runing<<<'
   return 0
  fi
  pidf=$(cat $PID)
  #echo "$pidf"  
  echo ">>> api PID = $pidf begin kill $pidf <<<"
  kill $pidf
  rm -rf $PID
  #sleep 2
  #is_exist
  local begin=$(date +%s)
  local end
  while true
  do 
    sleep 1
    end=$(date +%s)
    is_exist
    if [ $? -eq "1" ]; then
      break
    fi
    if [ $((end-begin)) -gt 60  ];then
      echo ">>> kill $pidf timeout ,now exec kill -9 $pidf<<< "
      break
    fi
  done

  is_exist
  if [ $? -eq "0" ]; then 
    echo ">>> api 2 PID = $pidf begin kill -9 $pidf  <<<"
    kill -9  $pidf
    sleep 2
    echo ">>> $JAR_NAME process stopped <<<"  
  else
    echo ">>> ${JAR_NAME} is not running <<<"
  fi
}

#输出运行状态
status(){
  is_exist
  if [ $? -eq "0" ]; then
    echo ">>> ${JAR_NAME} is running PID is ${pid} <<<"
  else
    echo ">>> ${JAR_NAME} is not running <<<"
  fi
}
# 查看log
logshow(){
  if [ -f "${log_dir}/catalina_${API_NAME}.out" ]
  then
    tail -f "${log_dir}/catalina_${API_NAME}.out"
  else
    echo "${log_dir}/catalina_${API_NAME}.out 文件不存在"
  fi
}
#重启
restart(){
  stop
  start
}

#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$2" in
  "start")
    start
    ;;
  "startnolog")
    startnolog
    ;;
  "stop")
    stop
    ;;
  "status")
    status
    ;;
  "restart")
    restart
    ;;
  "run")
    start
    logshow
    ;;
  "logshow")
    logshow
    ;;
  *)
    usage
    ;;
esac
exit 0


下载shell文件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值