jar在linux后台启动脚本

linux启动jar的脚本

脚本代码

#!/bin/bash

# 结合maven瘦身启动效果更佳
APP_NAME=lccsetsun_utils
VERSION=1.0.0-SNAPSHOT
SERVER_PORT=8091
ACTIVE_PROFILE=prod
GC_TIME=`date "+%Y%m%d%H%M%S"`
APP_HOME=$(dirname $(readlink -f "$0"))/
JAR_FILE=$APP_HOME/$APP_NAME-$VERSION.jar
if [ ! $JAVA_HOME ];then
  export JAVA_HOME=/usr
fi

if [ ! -d "$APP_HOME/logs" ];then
  mkdir $APP_HOME/logs
fi

if [ ! -d "$APP_HOME/logs/gc" ];then
  mkdir $APP_HOME/logs/gc
fi

LOG_FILE=$APP_HOME/logs/$APP_NAME.out
GC_LOG_PATH=$APP_HOME/logs/gc/gc-$APP_NAME-$GC_TIME.log
HEAP_DUMP_PATH=$APP_HOME/logs/heapdump/
MONITOR_FILE=$APP_HOME/monitor.sh

#JVM参数
JVM_OPTS="-Dapp.name=$APP_NAME 
-Dfile.encoding=UTF8 
-Dlog.path=$APP_HOME/logs 
-Xms256M 
-Xmx256M 
-XX:NewRatio=3 
-XX:SurvivorRatio=8 
-XX:+UseConcMarkSweepGC 
-XX:ParallelCMSThreads=2 
-XX:CMSInitiatingOccupancyFraction=70 
-XX:MaxGCPauseMillis=1000 
-XX:+PrintGCDetails 
-XX:+PrintGCDateStamps 
-Xloggc:$GC_LOG_PATH 
-XX:+HeapDumpOnOutOfMemoryError 
-XX:+DisableExplicitGC 
-XX:HeapDumpPath=$HEAP_DUMP_PATH"
# 应用监控探针 可选
JVM_AGENT="-javaagent:/home/soft/apache-skywalking-apm-bin/agent/skywalking-agent.jar -Dskywalking.agent.service_name=${APP_NAME} -Dskywalking.collector.backend_service=yourIP:11800"

appPid=0
monitorPid=0

start(){
  checkappPid
  if [ ! -n "$appPid" ]; then
    nohup $JAVA_HOME/bin/java -jar $JVM_OPTS $JAR_FILE --spring.profiles.active=$ACTIVE_PROFILE --server.port=$SERVER_PORT >$LOG_FILE 2>&1 &
    if [ ! "$CHECK_URL" ]; then
        tail -f $LOG_FILE
    fi
  else
      echo "$APP_NAME is running PID: $appPid"
  fi
}


status(){
   checkappPid
   if [ ! -n "$appPid" ]; then
     echo "$APP_NAME not runing"
   else
     echo "$APP_NAME runing PID: $appPid"
   fi
}

checkappPid(){
    appPid=`ps -ef |grep $JAR_FILE |grep -v grep |awk '{print $2}'`
}

checkMonitorPid(){
    monitorPid=`ps -ef |grep $MONITOR_FILE |grep -v grep |awk '{print $2}'`
}

stop(){
    checkappPid
    if [ ! -n "$appPid" ]; then
      echo "$APP_NAME not running"
    else
      kill -9 $appPid
      echo "$APP_NAME stopped..."
    fi
    #监控脚本重启时不kill监控进程
    if [ ! "$CHECK_URL" ]; then
        checkMonitorPid
        if [ ! -n "$monitorPid" ];then
          echo "$MONITOR_FILE not running"
        else
          kill -9 $monitorPid
          echo "$MONITOR_FILE stopped..."
        fi
    fi

}

restart(){
    stop
    sleep 1s
    start
}

case $1 in
          start) start;;
          stop)  stop;;
          restart)  restart;;
          status)  status;;
              *)  echo "require start|stop|restart|status"  ;;
esac

需要的修改配置信息的地方

      //修改为 自己的应用jar包
      APP_NAME=lccsetsun_utils
      VERSION=1.0.0-SNAPSHOT
      SERVER_PORT=8091
      ACTIVE_PROFILE=prod

可选功能

  • 探针监控功能
# 应用监控探针 可选 修改此处为 自己的探针部署地址和jar包地址
JVM_AGENT="-javaagent:/home/soft/apache-skywalking-apm-bin/agent/skywalking-agent.jar -Dskywalking.agent.service_name=${APP_NAME} -Dskywalking.collector.backend_service=yourIP:11800"
      
  • 配置探针监控
// 在 start{...} 方法中加入 ${JVM_AGENT}  示例:
start(){
  checkappPid
  if [ ! -n "$appPid" ]; then
    nohup $JAVA_HOME/bin/java  -jar $JVM_OPTS $JAR_FILE --spring.profiles.active=$ACTIVE_PROFILE --server.port=$SERVER_PORT >$LOG_FILE 2>&1 &
    if [ ! "$CHECK_URL" ]; then
        tail -f $LOG_FILE
    fi
  else
      echo "$APP_NAME is running PID: $appPid"
  fi
}
// 修改为:
start(){
  checkappPid
  if [ ! -n "$appPid" ]; then
    nohup $JAVA_HOME/bin/java ${JVM_AGENT}  -jar $JVM_OPTS $JAR_FILE --spring.profiles.active=$ACTIVE_PROFILE --server.port=$SERVER_PORT >$LOG_FILE 2>&1 &
    if [ ! "$CHECK_URL" ]; then
        tail -f $LOG_FILE
    fi
  else
      echo "$APP_NAME is running PID: $appPid"
  fi
}

如何使用

      cd /指定目录
      vim start.sh 
      // 复制上述脚本代码 
      :wq!

启动

      sh /指定目录/start.sh start 

停止

      sh /指定目录/start.sh stop 

重启

      sh /指定目录/start.sh restart 

说明

  • linux 服务器一键启动jar包脚本,附带探针监控配置信息,可自由选择是否添加相关监控,适用于 linux centOS 版本
posted @ 2021-01-15 11:35  lccsetsun  阅读(236)  评论(0)    收藏  举报