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> lt;/build>
打包就用maven install就行了,如果打包成功找到相应的jar重命名后上传到linux服务器授权一下就行
这样应用就启动了,即使命令行关闭了或者从ssh断开也不会影响程序的正常运行
断开连接
结束会话后程序就被shutdown了,如下所示
screen的使用和tmux大同小异,这边已经实践过了,就部署程序使其在后台运行,选screen和tmux效果都差不多。
PS:下面给大家介绍linux部署spring-boot
先对项目maven clean 然后在项目上maven install 打成jar包,之后到linux上删除前一个版本的进程
查看java进程的命令 ps -ef | grep java
杀死进程 kill -9 进程号
直接运行spring-boot项目 nohup java -jar sinocube.jar & 使用nohup一定要以&结尾
nohup 回输出日志文件,日志文件可以自定义文件名,默认为nohup.nohup.out
cat nohup.out 查看日志nohup.out是文件名称
tailf nohup.out 实时查看日志