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