linux部署SpringBoot程式
SpingBoot的學習總算告一段落了,但它還留給了我們一個疑問,那就是程式在linux伺服器上應該怎麼部署?使用命令啟動程式後如果ssh斷開了程式會不會被shutdown?對於第一個問題比較好解決,只需要保證jdk安裝正確就不會有太大問題。棘手的問題是後面這個,解決問題的關鍵就是要保證程式以守護程序(後臺方式)執行。這次就分享下linux下如何正確部署程式
為了解決這個問題,我查閱網上的資料找到了下面3種解決方案
1 把jar包弄成系統服務(不推薦)
這種方法缺點也比較明顯,那就是容易出現服務啟動不起來,因為不同的linux發行版本都或多或少存在差異
2 使用nohup 命令配合kill -9 xxx
這種方法比較容易接受,也是一種折中的做法,但是要停止程式會比較麻煩需要使用命令找到程序再使用kill -9 ,還是有點麻煩
3 使用screen、tmux等方式(推薦)
綜合考慮這種方法比較科學因為它提供了統一的管理多個會話的介面和相應的功能,操作起來比較簡單些,缺點是需要一點點的學習成本
tmux常用命令:
$ tmux new -s session-name 新建會話
$ tmux a -t session-name 接入指定會話
$ tmux detach /$ Ctrl-b d 斷開當前會話
$ tmux kill-session -t session-name 關閉會話
$ tmux ls 顯示所有會話
screen常用命令:
$ screen -S window-name 新建會話
$ screen -r 會話編號或名稱 接入指定會話/重新連線會話
$ screen -ls 顯示所有會話
Ctrl+a b 分離當前會話
Ctrl+a k
以下是它們的區別,雖說tmux比較先進但究竟如何選擇還是看大家的使用習慣
tmux 和 screen 很像,但比 screen 更好。要問好在哪裡,簡單的回答就是雖然與 screen 的功能相同,但是 tmux 設計得更好。screen 雖然可用,但是很不穩定。
以下是一些 tmux 超越 screen 的地方:
- screen 的專案大體上已經終止了,並且程式碼中有大量的問題
- tmux 是一個活躍的專案,並且其程式碼庫經常進行更新
- tmux 使用的是真正的客戶端/伺服器模型,而 screen 只是模擬了這種模型的行為
- tmux 同時支援 emacs 和 vim 的快捷鍵
- tmux 支援自動重新命名視窗
- tmux 可以高度的指令碼化
- tmux 的視窗分割功能更加先進
SpringBoot使用maven打包比較方便,打包時檢查下pom.xml的配置,確保有如下配置:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--fork : 如果沒有該項配置,devtools不會起作用,即應用不會restart -->
<fork>true</fork>
<!-- 可選的配置 -->
<executable>true</executable>
</configuration>
</plugin>
</plugins>
</build>
打包就用maven install就行了,如果打包成功找到相應的jar重新命名後上傳到linux伺服器授權一下就行
這樣應用就啟動了,即使命令列關閉了或者從ssh斷開也不會影響程式的正常執行
斷開連線
結束會話後程序就被shutdown了,如下所示
screen的使用和tmux大同小異,這邊已經實踐過了,就部署程式使其在後臺執行,選screen和tmux效果都差不多。下面的2篇文章給大家做參考
tmux簡單入門:
screen簡單入門: