linux部署SpringBoot程序

本文介绍三种在Linux服务器上部署SpringBoot应用的方法,并推荐使用screen或tmux以保持应用在后台运行。文章还提供了tmux和screen的基本命令及两者的对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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简单入门:

http://blog.jobbole.com/87278/

screen简单入门:

http://www.cnblogs.com/mchina/archive/2013/01/30/2880680.html

### 部署Spring Boot 3应用程序Linux服务器 #### 准备工作 为了确保Spring Boot应用能在Linux环境中顺利运行,需确认Java环境已安装并配置好。可通过命令`java -version`验证Java版本是否满足Spring Boot的要求。 #### 打包Spring Boot项目 在本地开发环境下准备好要部署的应用程序,并通过Maven或Gradle构建工具打包成可执行JAR文件。对于采用Maven作为构建工具的情况,可以在项目的根目录下执行如下命令完成打包操作: ```bash mvn clean package -DskipTests ``` 此过程会跳过测试阶段以加快速度[^2]。 #### 将应用上传至Linux服务器 利用SCP(Secure Copy Protocol)或者其他适合的方式把生成好的jar文件传输到目标Linux机器上的指定位置。假设远程主机名为example.com, 用户名是user,则可以这样发送文件: ```bash scp target/your-app.jar user@example.com:/home/user/ ``` #### 设置启动脚本 创建一个用于启动和管理服务的Shell脚本来简化日常运维任务。下面是一个简单的例子,保存为`start.sh`: ```bash #!/bin/bash nohup java -jar /path/to/your-app.jar > log.txt & echo $! > pidfile.pid ``` 赋予该脚本执行权限并通过它来启动应用: ```bash chmod +x start.sh ./start.sh ``` #### 使用Systemd守护进程 更推荐的做法是将Spring Boot应用注册成为systemctl的服务单元以便更好地管理和监控其状态。编写相应的`.service`定义文件放置于/etc/systemd/system路径之下,比如命名为myapp.service: ```ini [Unit] Description=My Spring Boot Application Service After=syslog.target [Service] User=nobody ExecStart=/usr/bin/java -jar /path/to/my-application.jar SuccessExitStatus=143 [Install] WantedBy=multi-user.target ``` 之后刷新daemon列表并启用新添加的服务项: ```bash sudo systemctl daemon-reload sudo systemctl enable myapp.service ``` 最后即可按照常规方式控制这个服务了,如启动、停止或是查看日志等: ```bash sudo systemctl start myapp.service sudo journalctl -u myapp.service ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值