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程序的方式,目前只找到了强制关闭的方式,如果后续了解到正常关闭的方式,会在博客中进行更新。

  

原文地址:https://www.cnblogs.com/lonelyJay/p/9841839.html