Linux 启动Jar脚本,超级大干货,非常详细

前言:

最近项目要部署到服务器,发现手敲命令确实太费劲了,所以打算在网上找一个启动jar的脚本,找到太多的版本,用了很多都很不好用,最终还得是自己找个较为好点的来改装一下,直接上命令操作步骤。

1、在心仪的目录中,创建一个sh文件,比如我希望启动的jar的端口号为:8080(注意:需要先查看对应的端口是否被占用),那么我就起一个名字为app-8080.sh的文件

touch app-8080.sh

2、创建后,需要给这个文件授权哟,不然你也用不了的哈

chmod 777 app-8080.sh

3、编辑该文件,可以使用vi/vim,然后点击i,切换到编辑模式

vi app-8080.sh

4、把sh的内容给复制进去

重点!!!重点!!!重点!!!需要修改的地方就三个

一、JAR_NAME=jar名字(xxx.jar)

二、JAR_PATH=jar路径(/home/project/)

三、PROT=端口号(8080)

#!/bin/bash
#您的jar包,需要包含后缀,例如:xxx.jar
JAR_NAME=xxx.jar
#您的jar包所在目录,例如:/home/projects/
JAR_PATH=/xxx/xxx/
#您所希望jar启动的端口号,设置前请先查询是否已经被占用的情况
PORT=8080

# 设置日志输出文件信息
dat1=$(date +%Y-%m-%d-%H-%M)

cd `dirname $0`
#使用说明,用来提示输入参数
usage() {
    echo "Usage: sh 执行脚本.sh [start|stop|restart|status]"
    exit 1
}
#检查程序是否在运行
is_exist(){
  pid=`ps -ef|grep -E ''$JAR_NAME'.'$PORT'|'$PORT'.*'$JAR_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 "${JAR_NAME} is already running. pid=${pid} ."
  else
	nohup java -Xms256m -Xmx524m -Dfastjson.parser.safeMode=true -Dfile.encoding=UTF-8 -Dserver.port=${PORT} -jar ${JAR_PATH}${JAR_NAME} > ${JAR_PATH}${dat1}.log  2>&1 &
    echo "${JAR_NAME} is start success"
    #tail -f fileserver-web.out
  fi
}


#停止方法
stop(){
  is_exist
  if [ $? -eq "0" ]; then
    kill -9 $pid
    echo "${JAR_NAME} is  stoped"
  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
}

#重启
restart(){
  stop
  start
}

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

5、大功告成,保存sh,点击esc,然后输入:wq,完毕

:wq

6、sh命令大全

     6.1、启动命令

./app-8080.sh start

     6.2、停止命令

./app-8080.sh stop

     6.3、查看状态命令

./app-8080.sh status

     6.4、重新启动命令

./app-8080.sh restart

 

接下来是干货部分:无感/不停服更新项目,无论是单机项目/微服务项目都是支持的,建议是使用nginx做转发/代理

1、单机版本的无感更新

      一、假设我启动的jar有两个端口,8080/8081,那么我就需要创建两个sh,app-8080.sh和app-8081.sh,具体的修改部分对应修改就好了,现在的场景就是需要更新一个项目,目前运行着的端口号是8080,那么我们直接把最新的jar包更新了,直接启动8081的sh,等到8081启动完毕,去修改nginx的配置指向8081,然后重启一下nginx,确定好请求都到8081后,就直接把8080的进程给杀了

2、微服务版的无感更新

     一、与上诉同理,网关模块需要和单机版本操作一致,其他业务模块更简单,直接启动副脚本,启动完毕,杀死就得进程即可,无需修改nginx配置,因为是微服务,哈哈哈哈哈,用到了服务注册与发现,懂得都懂哈

注:以上仅是个人观点,如有更好方案,请指点一下小弟,让小弟丰富一下知识~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值