Linux入门实践笔记(二)——Jar包的运行与关闭


内容

  本文主要介绍了Spring Boot项目打成jar包后,如何在centos上前台、后台启动和关闭,以及多jar包通过编写简单脚本批量启动。

版本

  操作系统: CentOS 7.2 64位

  JDK:1.8.0_181

适合人群

  linux运维人员,Java开发人员

说明

  转载请说明出处:Linux入门实践笔记(二)--Jar包运行与关闭

前提

  JDK安装和环境变量的配置,请参考:Linux入门实践笔记(一)——安装JDK与运行jar包

步骤

前台运行与关闭

  直接执行java -jar jar包名称,启动过程等控制台输出都会在当前终端控制台打印,且当前控制台不能再输入命令。如果关闭控制台,运行的java程序也会关闭

  前台运行的java程序,可以通过CTRL+C组合健进行关闭,并且此种方式会执行JVM和bean的destory相关的生命周期方法,比如关闭Spring容器,移除EurekaServer中注册的微服务,执行销毁回调方法等操作。

#启动java程序 [jmsA8@iz8vb62snc6e5cage5yvzbz jars]$ java -jar eureka-server-7001-7002-1.0-SNAPSHOT.jar  --spring.profiles.active=peer1 #springboot项目启动 ... . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/ ... #关闭java程序 #按下CTRL+C组合健,关闭java程序 2018-10-24 16:24:12.429  INFO 11835 --- [     Thread-14] c.n.eureka.DefaultEurekaServerContext : Shutting down ... 2018-10-24 16:24:12.436  INFO 11835 --- [     Thread-14] c.n.eureka.DefaultEurekaServerContext : Shut down ...#通过输出可以看到执行了JVM和bean的destory相关的生命周期方法

  显然,前台程序关闭很方便;但是,运行程序的效果有很多弊端。通过我们在执行java项目时,不能影响其他命令的输入,并且即使控制台关闭,java程序也不应该关闭。

后台运行与关闭

  最简单直接的方式:在java -jar 命令的最后添加 "&";

  这种方式可以很方便的在后台启动java程序,启动过程等控制台输出会在当前终端控制台打印;同时当前控制台可以输入其他命令,如果关闭控制台,运行的java程序也不会关闭

  但是后台运行的java项目,无法通过CTRL+C组合健进行关闭,需要使用"kill -9 PID"的方式关闭。此种方式有个很大的弊端:不会执行JVM和bean的destory相关的生命周期方法,比如通过这种方式关闭的微服务,不会在EureakServer中移除注册,反而会被误认为产生网络分区故障。

#启动java程序 [jmsA8@iz8vb62snc6e5cage5yvzbz jars]$ java -jar eureka-server-7001-7002-1.0-SNAPSHOT.jar  --spring.profiles.active=peer1 & [1] 12199   #显示两个号码,分别是任务号 1,和进程PID  12199 #springboot项目启动 ... . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/ ... #关闭java程序 #无法通过CTRL+C组合健进行关闭,需要使用"kill -9 PID"的方式关闭 [jmsA8@iz8vb62snc6e5cage5yvzbz jars]$ kill -9 12199 [1]+  Killed java -jar eureka-server-7001-7002-1.0-SNAPSHOT.jar --spring.profiles.active=peer1

  显然,后台程序的启动很方便,但是关闭程序存在弊端。接下来,我们整合上面两种方式的优点,做到“后台运行,前台关闭”。

后台运行前台关闭
方式一(推荐使用)

  启动:java -jar 命令的最后添加 "&",后台运行java程序;

  关闭:”fg jobnum“命令将后台程序转到前台执行,然后“CTRL+C组合健“关闭;

#启动java程序 [jmsA8@iz8vb62snc6e5cage5yvzbz jars]$ java -jar eureka-server-7001-7002-1.0-SNAPSHOT.jar  --spring.profiles.active=peer1 & [1] 12199   #显示两个号码,分别是任务号 1,和进程PID  12199 #springboot项目启动 ... . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/ ... #关闭java程序 fg 1 #“fg jobnum”命令将后台程序转到前台执行 java -jar eureka-server-7001-7002-1.0-SNAPSHOT.jar --spring.profiles.active=peer1 ... #java程序继续执行 #按下CTRL+C组合健,关闭java程序 2018-10-24 17:24:12.429  INFO 11835 --- [     Thread-14] c.n.eureka.DefaultEurekaServerContext : Shutting down ... 2018-10-24 17:24:12.436  INFO 11835 --- [     Thread-14] c.n.eureka.DefaultEurekaServerContext   : Shut down
方式二(不推荐使用,仅用于命令操作学习)

  启动:java -jar 命令前台运行java程序;

  后台运行:"CTRL+Z组合键"将前台程序转后台并暂停运行,使用“bg jobnum”命令启动后台程序;

  关闭:”fg jobnum“命令将后台程序转到前台执行,然后“CTRL+C组合健“关闭;

#启动java程序 [jmsA8@iz8vb62snc6e5cage5yvzbz jars]$ java -jar eureka-server-7001-7002-1.0-SNAPSHOT.jar  --spring.profiles.active=peer1 #springboot项目启动 ... . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/ ... ^Z              #"CTRL+Z组合键"将前台程序转后台并暂停运行,可以看到任务号是1 [1]+  Stopped  java -jar eureka-server-7001-7002-1.0-SNAPSHOT.jar --spring.profiles.active=peer1 [jmsA8@iz8vb62snc6e5cage5yvzbz jars]$ bg 1 #使用“bg jobnum”命令启动后台程序; [1]+ java -jar eureka-server-7001-7002-1.0-SNAPSHOT.jar --spring.profiles.active=peer1 & ... #java程序继续执行 ​ #关闭java程序 fg 1 #“fg jobnum”命令将后台程序转到前台执行 java -jar eureka-server-7001-7002-1.0-SNAPSHOT.jar --spring.profiles.active=peer1 ... #java程序继续执行 #按下CTRL+C组合健,关闭java程序 2018-10-24 17:53:09.568  INFO 12672 --- [     Thread-14] c.n.eureka.DefaultEurekaServerContext : Shutting down ... 2018-10-24 17:53:09.573  INFO 12672 --- [     Thread-14] c.n.eureka.DefaultEurekaServerContext   : Shut down
批量运行

  如果需要开启的jar包很多,可以编写启动脚本批量启动。

#创建脚本 [jmsA8@iz8vb62snc6e5cage5yvzbz jars]$ touch startCMD.sh #编辑脚本 [jmsA8@iz8vb62snc6e5cage5yvzbz jars]$ vi startCMD.sh java -jar eureka-server-7001-7002-1.0-SNAPSHOT.jar  --spring.profiles.active=peer1 & java -jar eureka-server-7001-7002-1.0-SNAPSHOT.jar  --spring.profiles.active=peer2 & java -jar eureka-server-7001-7002-1.0-SNAPSHOT.jar  --spring.profiles.active=peer3 & #为脚本增加所属用户和组下的可执行权限 [jmsA8@iz8vb62snc6e5cage5yvzbz jars]$ sudo chmod 774 startCMD.sh #执行脚本,启动jar包 [jmsA8@iz8vb62snc6e5cage5yvzbz jars]$ ./startCMD.sh #多个springboot项目同时启动 ... . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/ ... #查询各个程序的PID [jmsA8@iz8vb62snc6e5cage5yvzbz jars]$ jps 13250 jar 13251 jar 13252 jar 13646 Jps #查看PID和执行命令的对应关系 [jmsA8@iz8vb62snc6e5cage5yvzbz jars]$ ps amxs | grep java 1000 13250 0000000000000000 - - - -   pts/1  0:43 java -jar eureka-server-7001-7002-1.0-SNAPSHOT.jar --spring.profiles.active=peer1 1000 13251 0000000000000000 - - - -   pts/1  0:41 java -jar eureka-server-7001-7002-1.0-SNAPSHOT.jar --spring.profiles.active=peer2 1000 13252 0000000000000000 - - - - pts/1  0:41 java -jar eureka-server-7001-7002-1.0-SNAPSHOT.jar --spring.profiles.active=peer3 1000 13645 0000000000000000 - - - - pts/1  0:00 grep --color=auto java #kill -9 强行关闭java程序,可以全部关闭,也可以根据需求关闭特定的java程序。 [jmsA8@iz8vb62snc6e5cage5yvzbz jars]$ kill -9 12815 12816 12817 

  这种批量运行java程序的方式,目前只找到了强制关闭的方式,如果后续了解到正常关闭的方式,会在博客中进行更新。

  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM