接上文
1.APP_DIR=$1
把第一个参数赋值给APP_DIR(应用目录)
2.source
/opt/XXX/apps/$APP_DIR/work/deploy.conf
source
/opt/XXX/apps/$APP_DIR/work/context.conf
执行/opt/XXX/apps/$APP_DIR/work/这个目录下面的deploy.conf和context.conf文件中的内容
3.WORKDIR=/opt/XXX/apps/$APP_DIR/work
把/opt/XXX/apps/$APP_DIR/work
这个目录赋值到WORKDIR这个变量
4.JARNAME=`ls -t
$WORKDIR/*.jar | grep $APP_DIR | head -1 | awk -F/ '{print
$NF}'`
找到本服务对应的jar包名称,$APP_DIR既是本服务jar的文件名部分
5.LOGFILE=/var/nnn/logs/$APP_DIR.log
指定日志文件路径及日志文件名:服务名称.log
6.echo
"#开始部署#"
7.echo $PATH
##输出PATH的内容
8.which java
##找到java命令的安装路径
9.echo java -jar
-Djava.ext.dirs=$WORKDIR/lib $WORKDIR/$JARNAME
$WORKDIR/$LOGFILE
首先解释一下java.ext.dirs,这是java中的一个系统属性,指定的目录由ExtClassLoader加载器加载
这里的意思是在WORKDIR/lib目录下的文件由ExtClassLoader加载器加载
java
-jar$WORKDIR/$JARNAME
执行某个jar包,依赖的包由ExtClassLoader加载器加载,并把日志输出到$WORKDIR/$LOGFILE这个文件
10.JAVA_HOME=/usr/local/java
给JAVA_HOME变量赋值
11.LOG_HOME=/var/xxx/logs
设置日志目录
12.设置jvm相关日志文件
VM_LOG=''VM_LOG=$VM_LOG" -Xloggc:$LOG_HOME/$APP_DIR.gc.log.$(date +%Y%m%d%H%M)"
VM_LOG=$VM_LOG" -XX:ErrorFile=$LOG_HOME/$APP_DIR.vmerr.log.$(date +%Y%m%d%H%M)"
VM_LOG=$VM_LOG" -XX:HeapDumpPath=$LOG_HOME/$APP_DIR.heaperr.log.$(date
+%Y%m%d%H%M)"
13.设置jvm参数
if [ $ENVIRONMENT == "production" ]then
VM_PARAM='-server
-Xmx~g
-Xms~g
-XX:SurvivorRatio=~ -XX:NewRatio=~
-XX:PermSize=~m
-XX:MaxPermSize=~m
-XX:+HeapDumpOnOutOfMemoryError
-XX:+DisableExplicitGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintCommandLineFlags
-XX:+UseConcMarkSweepGC
-XX:+UseParNewGC
-XX:ParallelCMSThreads=4
-XX:+CMSClassUnloadingEnabled
-XX:+UseCMSCompactAtFullCollection
-XX:CMSFullGCsBeforeCompaction=1
-XX:CMSInitiatingOccupancyFraction=72'
else
VM_PARAM='-server
-Xmx2g
-XX:PermSize=128m
-XX:MaxPermSize=256m'
fi
13.设置host_name和host_ip
HOST_NAME=`hostname`
HOST_IP=`hostname -i | awk -F ' ' '{if(NF==1) print $1;else
print $2 end}'`
hostname 显示当前的主机名称
hostname -i 显示主机IP,多个以空格进行分割
awk -F ' '
意思是对管道中的数据按照空格进行分割
{if(NF==1) print $1;else
print $2 end} 如果分割后的列数为1,就输出第一列的值,否则输出第二列的值
14.创建部署路径
if [ -e $WORKDIR/$APP_DIR ]; then
rm -rf $WORKDIR/$APP_DIR
fi
mkdir $WORKDIR/$APP_DIR
如果路径存在,则删除里面的内容
创建路径$WORKDIR/$APP_DIR
15.切换到APP_DIR
cd $WORKDIR/$APP_DIR
16.把当前路径设置到变量中
RPWD=$PWD
17.$JAVA_HOME/bin/jar xf
$WORKDIR/$JARNAME
jar xf xxx.jar 展开xxx.jar的内容,并存放在当前目录下
18.cpath=$WORKDIR/$APP_DIR
下面会解释为啥是以冒号分隔
把APP_DIR赋值给变量cpath
19.设置cpath,关联上所有的jar包
for file in `ls $WORKDIR/lib/*.jar`
do
cpath=$cpath:$file
done
20.执行main类
$JAVA_HOME/jre/bin/java
$VM_LOG ##jvm日志目录
$VM_PARAM ##jvm参数 堆大小
永久区大小等参数
-Denvironment=$ENVIRONMENT ##设置environment变量
-Dapp.key=$APP_KEY ##设置app.key
-Dapp.host=$HOST_NAME ##设置app.host
-Dapp.ip=$HOST_IP ##设置app.ip
-Dfile.encoding=UTF-8 ##设置file.encoding
-cp $cpath $BOOTSTRAP_MAIN ##执行BOOTSTRAP_MAIN类
>> $LOGFILE
2>&1##输出日志
java-cp $cpath $BOOTSTRAP_MAIN
-cp $cpath-cp
和 -classpath 一样,是指定类运行所依赖其他类的路径
通常是类库,jar包之类,需要全路径到jar包,
window上分号“;”分隔,linux上是分号“:”分隔。
不支持通配符,需要列出所有jar包,用一点“.”代表当前路径。
java -cp ..\lib\hsqldb.jar org.hsqldb.Server -database
mydb
或
java -cp ../lib/hsqldb.jar org.hsqldb.Server -databa