內容
本文主要介紹了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程序的方式,目前只找到了強制關閉的方式,如果后續了解到正常關閉的方式,會在博客中進行更新。