配置运行脚本
1.配置脚本
选好你要部署到的文件路径 ,假设项目名是ABC,这里我选的是/home/ABC/
,然后建立几个文件夹和一个运行脚本。
cd /home/ABC
mkdir config
mkdir heapdump
mkdir log
touch restart.sh
目录结构
|——home
|————ABC
|——————config (jar 项目的配置文件{application.yml 等})
|——————heapdump (保存Heap Dump 信息)
|——————log (相关log文件)
|——————restart.sh (运行脚本)
|——————abc.jar
然后进行编写restart.sh脚本的内容 vim restart.sh
#!/bin/bash
base_home='/www/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_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/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_20180821.log
。
3.使用
经过对restart.sh
脚本的编写,然后执行chmod +x restart.sh
这个脚本就可以正常运行了 sh restart.sh
(要确保abc.jar包已经上传到ABC/文件夹下)