echo java.ext.dirs_shell脚本-部署服务

接上文

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

java -djava.ext.dirs和--class-path是两个Java的命令行选项,都用于指定Java虚拟机运行时查找类文件的路径。 Java的类库是由许多Java类文件组成的,这些类文件需要被Java虚拟机加载并执行。当我们编写Java程序时,我们需要通过某种方式告知Java虚拟机去哪里查找这些类文件。 -djava.ext.dirs选项用于指定Java虚拟机搜索Java扩展(Java Extension)类库的路径。Java扩展类库是指Java虚拟机内置的一些功能库,比如Java Database Connectivity(JDBC)类库,Java Naming and Directory Interface(JNDI)类库等。Java扩展类库通常存放在JRE的ext文件夹中,但是有时候我们可能需要自己定义一些Java扩展类库,那么就需要使用-djava.ext.dirs选项来告知Java虚拟机去哪里查找这些类文件。 --class-path选项用于指定Java虚拟机搜索Java应用程序类库的路径。Java应用程序类库是指我们编写的Java程序所依赖的一些类库,比如在编写Spring框架的应用程序时需要依赖Spring框架的类库。在编写Java应用程序时,我们需要告知Java虚拟机去哪里查找这些类库,那么就需要使用--class-path选项来指定Java应用程序类库的路径。 综上所述,Java -djava.ext.dirs和--class-path选项都用于指定Java虚拟机运行时查找类文件的路径,但是-djava.ext.dirs选项用于指定Java扩展类库的路径,而--class-path选项用于指定Java应用程序类库的路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值