现在java web开发一般都是用springboot框架,部署应用时使用jar包(java archive),也就是java归档文件,而不是使用war包(打包格式的java web工程)。
war包结构
jar包和war包的主要区别就在于jar包内部已经集成了tomcat服务器,war包部署还需要先安装一个tomcat服务。用jar部署java服务更加方便,也是大势所趋。在linux服务器上部署完jar包程序以后,该如何启动服务和停止服务呢?
在主机上先配置好java的环境变量,之后就可以用java命令启动jar包:
java -jar xxx.jar
在启动jar包的时候,通常需要设置很多与内存有关的参数,要详细了解java启动内存参数,可以阅读前文《java面试常见问题:jvm内存异常及内存参数设置》。常用的内存配置参数包括:
-xx: metapacesize 设置元空间大小的初始值;-xx:maxmetaspacesize 设置元空间大小的最大值;-xms 设置堆内存的初始值;-xmx 设置堆内存的最大值;-xmn 设置新生代的大小;-xss 设置栈区的大小;-xx:survivorratio 设置新生代中eden区域和survivor区域的比例,默认为8-xx:+uconcmarksweepgc 设置垃圾回收器为并发标记清除(concurrent mark sweep)垃圾回收器。这样在jar包的启动命令中要把所有参数都配置好,可要写不少字。
java -jar -xx:metaspacesize=128m -xx:maxmetaspacesize=128m -xms1024m -xmx1024m -xmn256m -xss256k -xx:survivorratio=8 -xx:+uconcmarksweepgc xxxrvice.jar
为了避免每次启动都打这么多字,我们可以把这一长串启动命令放在shell脚本中运行。要启动jar包服务只需要运行脚本就行。
shell 是一个用 c 语言编写的程序,它是用户使用 linux/unix系统的桥梁,有好多种不同版本的shell。ken thompson 开发的 sh shell是第一个 unix shell。
美国计算机科学学者kenneth lane thompson,1983年图灵奖得主,c语言前身b语言的作者,unix发明人之一
在linux上,最常用的shell程序就是 bash。bash保持了对 sh shell 的兼容性,是各种 linux 发行版默认配置的 shell。下面我们就看一下如何用shell脚本实现jar包启动。
#!/bin/shappdir=`pwd`pidfile=$appdir/xxxrvice.pidif [ -f "$pidfile" ] && kill -0 $(cat "$pidfile"); thenecho "xxxrvice is already running..."exit 1finohup java -jar -xx:metaspacesize=128m -xx:maxmetaspacesize=128m -xms1024m -xmx1024m -xmn256m 炙手可热是什么意思-xss256k -xx:survivorratio=8 -xx:+uconcmarksweepgc xxxrvice.jar > out.file 2>&1 & echo $! > $pidfileecho "start xxxrvice success..."
第一行脚本是说明shell程序所在的位置,基本上linux系统都是一样的。
第二行脚本是用pwd指令获取当前路径。通常我们把这个shell脚本和jar包文件会放在一个路径下,要特别注意pwd上面的不是单引号,而是键盘左上角的“点号”。appdir就是脚本所在的当前路径了。
第三行脚本定义了变量pidfile,指向文件名xxxrvice.pid,这个文件就是用来记录jar包启动后的进程id。这样将来就可以用进程id来关闭jar包服务了。
第四行脚本是判断是否xxxrvice程序已经运行了。
[-f “$pidfile”]是查询pid文件是否存在。cat “$pidfile”是打印pid文件内容,也就是进程id。kill -0 pid的意思并不是要杀死进程,而是让系统来对进程进行检查,如果进程不存在,kill -0会报错。第5行到第7行脚本的含义:如果pid文件存在且对应进程也存在,那么说明jar包已经启动了,不需要再重新启动,脚本退出运行。
如果jar包尚未启动,则运行第独立宣言内容8行脚本。省略掉java启动内存设置参数,就是下面这样:
nohup java -jar xxxrvice.jar > out.file 2>&1 & echo $! > $pidfile
nohup 意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行。>outfile 代表输出重定向,程序运行时的标准输出内容都会打印到out.file上。2>&1 就是将标准错误重定向到标准输出。标准输出已经到了out.file上,因此错误也会输出到这个文件上面。如果不希望记录标准输出和错误,可以重定向到/dev/null上,因为 /dev/null 是一个不存在的设备,从这里什么也读不出来。&代表在后台运行,echo $! > $pidfile 则是把进程id输出到pid文件上。第8行脚本执辽宁师范大学官网行成功后,第9行脚本打印成功。另外我们还可以在当前目录下发现多了一个xxxrvice.pid文件。
那么要如何关掉正在执行的java进程呢,通常可以运行:
ps aux | grep xxxrvice
这句指令会列出所有带有xxxrvice字样的进程,在其中我们找到要关掉的进程id,随后就用kill -9 pid可以杀死进程。kill -9 发送sigkill信号给进程,告诉进程,你被终结了,请立刻退出。
不过有了启动脚本作为基础,我们不需要再费力去找进程id。结合启动脚本,我们还可以设计下面这样一个停止脚本。
#!/bin/shappdir=`pwd`pidfile=$appdir/xxxrvice.pidif [ ! -f "$pidfile" ] || ! kill -0 "$(cat "$pidfile")"; thenecho "xxxrvice not running..."elecho "stopping xxxrvice..."pid="$(cat "$pidfile")"kill露华浓眼影 -9 $pidrm "$pidfile"ech五亩之宅o "...xxxrvice stopped"fi
这个停止脚本和启动脚本类似,这里就不再逐行解释了,如果大家有什么问题,可以在评论区留言。
本文发布于:2023-04-05 03:41:32,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/97014472cd9dbf9ed6d4018712bea4dd.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:jar运行命令(讲解java部署jar还是war优劣).doc
本文 PDF 下载地址:jar运行命令(讲解java部署jar还是war优劣).pdf
留言与评论(共有 0 条评论) |