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

      

  • 相关阅读:
    [洛谷P1484] 种树
    Codeforces Round #505 Div. 1 + Div. 2
    [NOIp2015] 斗地主
    ☆ [NOIp2016] 天天爱跑步 「树上差分」
    [NOI2010] 超级钢琴
    [POI2000] 病毒
    [SCOI2010] 股票交易
    [NOI2002] 贪吃的九头龙
    [ZJOI2008] 骑士
    LeetCode 笔记系列 18 Maximal Rectangle [学以致用]
  • 原文地址:https://www.cnblogs.com/lonelyJay/p/9841839.html
Copyright © 2011-2022 走看看