Linux 环境部署 jar项目

Linux 环境部署 jar项目

在很多小公司,很多时候一个后台程序员还要承担一部分运维的角色,难免避免不了自己动手上某云上部署后台项目,war包暂且这里就不介绍了,这次主要记录下部署用maven打包成jar包的项目。


  • Linux 环境部署 jar项目
    • 配置java环境
      • 查看操作的系统位数
      • 下载jdk
      • 配置环境变量
    • 配置运行脚本
      • 配置脚本
      • 解释脚本内容
      • 使用


配置java环境

1.查看操作的系统位数

uname -ar

出现是x86_64说明是 64位的

也可以用getconf LONG_BIT

直接输出当前系统位数

2.下载jdk

进入orcale官网选择需要下载的版本jdk1.8传送门

这里我选择的是8u144-b01的rpm包,按照往常linux下的下载命令,我们会使用wget命令进行下载再解压安装

wget http://download.oracle.com/otn-pub/java/jdk/8u144-b01/090f390dda5b47b9b721c7dfaa008135/jdk-8u144-linux-x64.rpm 

Linux 环境部署 jar项目_第1张图片

天啦噜!怎么下载的是一个 5.2k的html?说好的jdk呢?
我们再仔细看jdk下载页面,会发现有一个Accept License Agreement需要勾选才能下载 。经过翻阅资料(百度),最终用下面这个命令成功下载了jdk。

wget --no-check-certificate --no-cookie --header "Cookie: oraclelicense=accept-securebackup-cookie;"  http://download.oracle.com/otn-pub/java/jdk/8u144-b01/090f390dda5b47b9b721c7dfaa008135/jdk-8u144-linux-x64.rpm

然后执行rpm -ivh jdk-8u144-linux-x64.rpm安装jdk
如果下载的是tar.gz包,直接用命令tar -zxvf jdk-8u92-linux-x64.tar.gz解压即可

3.配置环境变量

执行vi /etc/profile,在文件末尾添加

export JAVA_HOME=/home/roo/jdk1.8.0_92  (这里修改为自己的jak安装路径)
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

然后执行java -version看看是否配置成功


配置运行脚本

1.配置脚本

选好你要部署到的文件路径 ,假设项目名是ABC,这里我选的是/home/ABC/,然后建立几个文件夹和一个运行脚本。

cd /home/ABC
mkdir app
mkdir config
mkdir heapdump
mkdir log
touch  restart.sh

目录结构是
|—–home
|———ABC
|————–app (存放ABC.jar)
|————–config (jar项目的配置文件{application.yml等},jar项目运行的时候,优先使用这里的配置文件,若没有才使用jar包里的配置文件)
|————–heapdump (保存Heap Dump信息)
|————–log (相关log)
|————–restart.sh (运行脚本)

然后进行编写restart.sh脚本的内容

#!/bin/bash

base_home='/home/ABC'
app_name='ABC'

pid=`ps -ef|grep ${app_name}|grep -v grep|grep -v restart|awk '{print$2}'`
if [ -n "${pid}" ] ;then
        kill -9 ${pid}
        sleep 10
fi

gclog_file=$base_home/log/gc.log
dump_dir=$base_home/heapdump
errorlogs_dir=$base_home/log

java -Xmx1g -Xms1g -XX:+UseParallelGC -XX:+UseParallelOldGC -XX:+PrintGCDetails  -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation  -XX:GCLogFileSize=128M  -XX:NumberOfGCLogFiles=1  -Xloggc:${gclog_file} -XX:HeapDumpPath=${dump_dir} -jar $base_home/app/${app_name}.jar --spring.config.location=$base_home/config/application.yml >> $base_home/log/${app_name}_$(date +'%Y%m%d').log &

2.解释脚本内容

  • base_home='/home/ABC' : ABC项目的根路径
  • app_name='ABC' : 项目名称(即/home/ABC/app/ABC.jar的文件名)
  • pid=`ps -ef|grep ${app_name}|grep -v grep|grep -v restart|awk '{print$2}'` : 找到ABC项目当前运行的进程号(若有)

  • if [ -n "${pid}" ] ;then
    kill -9 ${pid}
    sleep 10
    fi
    : 若ABC项目已运行,根据上一步骤获得的pid可以杀死当前运行ABC项目的进程
  • gclog_file=$base_home/log/gc.log
  • dump_dir=$base_home/heapdump
  • errorlogs_dir=$base_home/log

最后的运行命令有点复杂,让我们一个个解读

  • 这么长的命令,其实运行起来的命令是很简单java -jar $base_home/app/${app_name}.jar &,这样即可成功运行起来,& 是让此命令后台运行 ,这里这么复杂是进行了jvm优化。
  • -Xmx1g : 设置JVM最大可用内存为1g。
  • -Xms1g : 设置JVM促使内存为1g。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
  • -XX:+UseParallelGC : 选择垃圾收集器为并行收集器。
  • -XX:+UseParallelOldGC : 配置年老代垃圾收集方式为并行收集。
  • -XX:+PrintGCDetails : 可以详细了解GC中的变化。
  • -XX:+PrintGCTimeStamps : 配合上面的PrintGCDetails,可以了解这些垃圾收集发生的时间,自JVM启动以后以秒计量。
  • -XX:+UseGCLogFileRotation : 启用GC日志文件的自动转储。
  • -XX:GCLogFileSize=128M : 控制GC日志文件的大小。
  • -XX:NumberOfGCLogFiles=1 : GC日志文件的循环数目。
  • -Xloggc:${gclog_file} : 把gc日志信息记录到文件gclog_file=$base_home/log/gc.log
  • -XX:HeapDumpPath=${dump_dir} : 将Heap Dump信息保存到dump_dir=$base_home/heapdump
  • --spring.config.location=$base_home/config/application.yml : 运行的配置文件,若没有config/application.yml,则用jar里的配置文件。
  • >> $base_home/log/${app_name}_$(date +'%Y%m%d').log 将运行的log信息保存到$base_home/log 文件夹下,log文件会以日期命名${app_name}_$(date +'%Y%m%d').log 最终的名字可能是ABC_20171206.log

3.使用

经过对restart.sh 脚本的编写,然后执行chmod +x restart.sh 这个脚本就可以正常运行了
sh restart.sh(要确保ABC.jar包已经上传到app/文件夹下)

你可能感兴趣的:(linux)