內容html
本文主要介紹了Spring Boot項目打成jar包後,如何在centos上前臺、後臺啓動和關閉,以及多jar包經過編寫簡單腳本批量啓動。java
版本linux
操做系統: CentOS 7.2 64位spring
JDK:1.8.0_181centos
適合人羣springboot
linux運維人員,Java開發人員網絡
說明運維
轉載請說明出處:Linux入門實踐筆記(二)--Jar包運行與關閉微服務
前提linux運維
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程序的方式,目前只找到了強制關閉的方式,若是後續瞭解到正常關閉的方式,會在博客中進行更新。