现在JAVA Web开发一般都是用Springboot框架,部署应用时使用Jar包(Java ARchive),也就是Java归档文件,而不是使用War包(打包格式的Java web工程) 。
文章插图
【Jar包程序部署后如何启动和停止】War包结构
Jar包和War包的主要区别就在于Jar包内部已经集成了Tomcat服务器,War包部署还需要先安装一个Tomcat服务 。用jar部署java服务更加方便,也是大势所趋 。在linux服务器上部署完Jar包程序以后,该如何启动服务和停止服务呢?
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:+UseConcMarkSweepGC 设置垃圾回收器为并发标记清除(Concurrent Mark Sweep)垃圾回收器 。
java -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC xxxService.jar
为了避免每次启动都打这么多字,我们可以把这一长串启动命令放在Shell脚本中运行 。要启动Jar包服务只需要运行脚本就行 。
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/xxxService.pidif [ -f "$PIDFILE" ] && kill -0 $(cat "$PIDFILE"); thenecho "xxxService is already running..."exit 1finohup java -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC xxxService.jar > out.file 2>&1 & echo $! > $PIDFILEecho "start xxxService success..."
第一行脚本是说明shell程序所在的位置,基本上Linux系统都是一样的 。第二行脚本是用pwd指令获取当前路径 。通常我们把这个shell脚本和Jar包文件会放在一个路径下,要特别注意pwd上面的不是单引号,而是键盘左上角的“点号” 。APPDIR就是脚本所在的当前路径了 。
第三行脚本定义了变量PIDFILE,指向文件名xxxService.pid,这个文件就是用来记录Jar包启动后的进程ID 。这样将来就可以用进程ID来关闭Jar包服务了 。
第四行脚本是判断是否xxxService程序已经运行了 。
- [-f "$PIDFILE"]是查询pid文件是否存在 。
- cat "$PIDFILE"是打印pid文件内容,也就是进程ID 。
- kill -0 pid的意思并不是要杀死进程,而是让系统来对进程进行检查,如果进程不存在,kill -0会报错 。
如果Jar包尚未启动,则运行第8行脚本 。省略掉Java启动内存设置参数,就是下面这样:
nohup java -jar xxxService.jar > out.file 2>&1 & echo $! > $PIDFILE
- nohup 意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行 。
- >outfile 代表输出重定向,程序运行时的标准输出内容都会打印到out.file上 。
- 2>&1 就是将标准错误重定向到标准输出 。标准输出已经到了out.file上,因此错误也会输出到这个文件上面 。如果不希望记录标准输出和错误,可以重定向到/dev/null上,因为 /dev/null 是一个不存在的设备,从这里什么也读不出来 。
推荐阅读
- 抓包神器Charles的最全使用详解
- 如何鉴别皮包真假
- 如何保养真皮包
- 解读包包品牌全集
- 包拯是状元还是进士,包拯科举考试是第几名
- 一文搞懂Python中的核心概念:导入,模块,包
- 完颜洪烈爱包惜弱吗?,完颜洪烈与包惜弱有夫妻之实吗?
- 纯森太重久茶烟多少钱1包,花茶的水温度多少最好
- 副食包括什么种类,哪些食物属于副食
- 洋槐花包饺子的做法,洋槐花包子的做法