Linux Java Jar Shell 脚本

博文目录

文章目录


使用方式

  • ./run.sh start
  • ./run.sh stop
  • ./run.sh restart
  • ./run.sh status
#!/bin/bash

JAVA_CMD="java"
APP_NAME="bid"
JAR_NAME="bid.jar"
PROFILE="develop"

BASE_PATH=`cd $(dirname $0); pwd`
# 应用基础目录下的 env 文件中定义的变量
# source ${BASE_PATH}/env

OPTIONS="-XX:MetaspaceSize=256M"
OPTIONS="${OPTIONS} -jar ${BASE_PATH}/${JAR_NAME}"
OPTIONS="${OPTIONS} --spring.profiles.active=${PROFILE}"

echoRed() { echo $'\e[0;31m'"$1"$'\e[0m'; }
echoCyan() { echo $'\e[0;36m'"$1"$'\e[0m'; }
echoYellow() { echo $'\e[0;33m'"$1"$'\e[0m'; }

[[ -z "$stopWaitTime" ]] && stopWaitTime=10

getPid() {
  pid=`ps ax | grep -i ${JAR_NAME} | grep java | grep -v grep | awk '{print $1}'`
}

start() {
  getPid
  if [ -z ${pid} ] ; then
    doStart
  else
    echoCyan "[${APP_NAME}] 正在运行 ($pid)"
  fi
}

doStart() {
  echoCyan "${JAVA_CMD} ${OPTIONS}"
  # nohup ${JAVA_CMD} ${OPTIONS} > ${BASE_PATH}/start.out/dev/null 2>&1 &
  nohup ${JAVA_CMD} ${OPTIONS} > /dev/null 2>&1 &
  # 等待启动
  startCounter=0 # 记录等待次数
  while [ -z ${pid} ]
  do
    sleep 1
    startCounter=`expr $startCounter + 1`
    echoCyan "[${APP_NAME}] 启动中, ${startCounter}..."
    getPid
    if [ "$startCounter" -ge $stopWaitTime ];then
        pid=""
    fi
  done
  # 输出启动结果
  if [ -z ${pid} ] ; then
       echoRed "[${APP_NAME}] 启动失败"
  else
       echoCyan "[${APP_NAME}] 已启动 ($pid)"
  fi
}

restart() {
  stop && start
}

stop() {
  getPid
  #是否在运行
  if [ -z ${pid} ] ; then
    echoYellow "[${APP_NAME}] 未在运行"
    return;
  fi
  #停止服务
  echoCyan "[${APP_NAME}] 正在运行 (${pid})"
  kill ${pid} #&
  #等待kill没有效果,去掉
  #kpid=$!
  #wait $kpid

  #等待停止
  stopCounter=0
  getPid
  while [ ${pid} ] ; do
    sleep 1
    stopCounter=`expr $stopCounter + 1`
    echoCyan "[${APP_NAME}] 停止中, ${stopCounter} 秒 ..."
    getPid
    if [ "$stopCounter" -ge $stopWaitTime ];then
        echoCyan "[${APP_NAME}] 强制停止 ..."
        kill -9 ${pid}
    fi
  done

  #输出结果
  getPid
  if [ -z ${pid} ] ; then
    echoCyan "[${APP_NAME}] 已停止"
  else
    echoRed "[${APP_NAME}] 停止失败"
  fi
}

status() {
    getPid
    if [ -z ${pid} ] ; then
      echoYellow "[${APP_NAME}] 未在运行"
    else
      echoCyan "[${APP_NAME}] 正在运行 ($pid)"
    fi
}

case "$1" in
    'start')
        start
        ;;
    'stop')
        stop
        ;;
    'restart')
        stop
        start
        ;;
    'status')
        status
        ;;
    *)
        echo "Usage: $0 { start | stop | restart | status }"
        ;;
esac
  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值