Centos项目部署之运行SpringBoot打包后的jar文件

Centos7 运行SpringBoot打包后的jar文件

方式一、直接运行

bash 复制代码
java -jar xxxx.jar

当您直接使用 java -jar xxxx.jar 运行 Java 程序时,如果 关闭终端会话(比如直接关闭 SSH 窗口或终端标签页),进程会被终止。

方式二、使用 Screen 管理 Java 服务会话(开发阶段)

1. 安装 Screen 工具

bash 复制代码
sudo yum install -y screen

2. 会话生命周期管理

操作阶段 命令/动作 说明
创建会话 screen -S java_server 创建名为java_server的新会话
启动服务 java -jar myapp.jar 在会话内运行Java程序
脱离会话 Ctrl+A → D 脱离会话,保持程序后台运行 (先按 Ctrl+A,松开后按 D)
查看会话 screen -ls 显示所有活跃会话(Detached状态表示正常运行)
重连会话 screen -r java_server 重新连接指定会话
终止服务 会话内按Ctrl+Cexit 先停止程序再退出会话

3. 操作案列

bash 复制代码
# 1. 创建并进入会话
screen -S java_server 

# 2. 启动服务
java -jar xxxx.jar

# 3. 脱离会话 (保持运行)
Ctrl + A → D (先按 Ctrl+A,松开后按 D)

# 4. 查看会话列表
screen -ls
# 输出:There is a screen on:
#         12345.java_server   (Detached)

# 5. 重连会话
screen -r java_server

# 6. 安全终止会话(在会话内)
exit

# 需要关闭 JAR 时的操作
screen -ls #查看会话列表
screen -r java_server  # 重新进入会话
Ctrl + C  # 终止 JAR 进程 在会话内按下
exit  # 退出并删除会话记录【当前java_server会话就删除了】

# 删除会话
screen -ls #查看会话列表
screen -XS 会话名称 quit # 强制终止会话
screen -ls #查看会话列表 会话名称已经删除

4. 检查现有 Java 进程

bash 复制代码
ps -ef | grep java  # 查看所有Java进程及所属会话

方式三、使用systemd部署java项目(推荐)

推荐: 生产环境推荐使用

1. 创建项目目录

1、创建/usr/local/project/java/blog-admin-api 目录

bash 复制代码
sudo mkdir -p /usr/local/project/java/blog-admin-api

2、上传 blog-admin-0.0.1-SNAPSHOT.jar 文件到这个目录下

2. 用户创建与权限配置

创建一个用户 smallhui,并为 /usr/local/project/java 目录及其内容赋予权限。

2.1 创建系统用户
bash 复制代码
# 创建用户 smallhui  -m 选项会为用户创建一个主目录(默认为 /home/smallhui)
sudo useradd -m smallhui
2.2 设置用户密码
bash 复制代码
# 为用户 smallhui 设置密码/修改:  系统会提示你输入并确认新密码。
sudo passwd smallhui
2.3 验证用户信息
bash 复制代码
# 确认用户 smallhui 是否创建成功
id smallhui

典型输出:

scss 复制代码
uid=1000(smallhui) gid=1000(smallhui) groups=1000(smallhui)
2.4 配置目录所有权
bash 复制代码
# 更改目录的所有者 将 /usr/local/project/java 目录及其所有内容的所有者更改为 smallhui
sudo chown -R smallhui:smallhui /usr/local/project/java
2.5 设置目录权限
bash 复制代码
# 设置目录权限 755(所有者有读写执行权限,组和其他用户有读执行权限)
sudo chmod -R 755 /usr/local/project/java
2.6 权限验证
bash 复制代码
# 检查目录权限
ls -ld /usr/local/project/java
ls -l /usr/local/project/java

示例输出:

yaml 复制代码
drwxr-xr-x 3 smallhui smallhui 4096 Jul  2 17:49 /usr/local/project/java
drwxr-xr-x 2 smallhui smallhui 4096 Jul  2 17:49 blog-admin-api
2.7 权限说明
复制代码
 权限结构分解:
d rwx r-x r-x
├─ 目录标识
├─ 所有者权限(读/写/执行)
├─ 组权限(读/执行)
└─ 其他用户权限(读/执行)

3. 创建启动服务

3.1 创建服务启动文件

/etc/systemd/system/ 目录下,创建文件 java-blog-admin-api-9001.service java-blog-admin-api-9002.service

3.2 配置服务启动文件

进入/etc/systemd/system/ 目录

bash 复制代码
cd /etc/systemd/system/

查看服务文件列表

bash 复制代码
ll *.service*

创建java-blog-admin-api-9001.service文件

bash 复制代码
vim java-blog-admin-api-9001.service

内容如下

bash 复制代码
[Unit]
# 服务描述
Description=Java Blog Admin API Service(Port 9001)
# 服务启动顺序依赖,确保网络服务已经启动
After=network.target
# 确保在mysql和redis服务启动之后启动此服务
After=mysql.service redis.service

[Service]
# Java 应用程序的用户
User=smallhui
# Java 应用程序的工作目录
WorkingDirectory=/usr/local/project/java/blog-admin-api
# Java 应用程序的启动命令  使用which java 查看到:/usr/local/jdk-11/bin/java
ExecStart=/usr/local/jdk-11/bin/java -jar /usr/local/project/java/blog-admin-api/blog-admin-0.0.1-SNAPSHOT.jar --server.port=9001 --logging.file.name=/var/log/blog-admin-api-9001.log
# 输出日志到journal(journalctl可查)
StandardOutput=journal
# 错误日志也存journal
StandardError=journal
# 日志打标记(用服务名+端口)唯一标识符 确保唯一性
SyslogIdentifier=blog-admin-api-9001
# 重启策略,当服务异常退出时自动重启
Restart=always
# 重启间隔时间(秒)
RestartSec=30
# 超时时间,防止服务启动或停止时卡住
TimeoutStopSec=60
# 设置系统语言环境为 UTF-8
Environment="LANG=en_US.UTF-8"
# 设置 Java 应用程序的默认字符集为 UTF-8
Environment="JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8"
# 环境变量,可以在这里设置 Java 的内存参数等  使用 echo $JAVA_HOME 可以查看到:/usr/local/jdk-11
Environment="JAVA_HOME=/usr/local/jdk-11"
# 更新 PATH 环境变量,确保使用正确的 Java 可执行文件
Environment="PATH=${JAVA_HOME}/bin:$PATH"

[Install]
# 服务的启动目标
WantedBy=multi-user.target

创建java-blog-admin-api-9002.service文件

bash 复制代码
vim java-blog-admin-api-9002.service

内容如下

bash 复制代码
[Unit]

Description=Java Blog Admin API Service(Port 9002)

After=network.target

After=mysql.service redis.service

[Service]

User=smallhui

WorkingDirectory=/usr/local/project/java/blog-admin-api

ExecStart=/usr/local/jdk-11/bin/java -jar /usr/local/project/java/blog-admin-api/blog-admin-0.0.1-SNAPSHOT.jar --server.port=9002 --logging.file.name=/var/log/blog-admin-api-9002.log

StandardOutput=journal

StandardError=journal
# 日志打标记(用服务名+端口)唯一标识符 确保唯一性
SyslogIdentifier=blog-admin-api-9002

Restart=always

RestartSec=30

TimeoutStopSec=60

Environment="LANG=en_US.UTF-8"

Environment="JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8"

Environment="JAVA_HOME=/usr/local/jdk-11"

Environment="PATH=${JAVA_HOME}/bin:$PATH"

[Install]

WantedBy=multi-user.target
3.3 重新加载 systemd 配置
bash 复制代码
sudo systemctl daemon-reload
3.4 启动和启用服务
bash 复制代码
# 启动服务
sudo systemctl start java-blog-admin-api-9001 
# 设置为开机自启
sudo systemctl enable java-blog-admin-api-9001

sudo systemctl start java-blog-admin-api-9002
sudo systemctl enable java-blog-admin-api-9002
3.5 检查服务状态
bash 复制代码
sudo systemctl status java-blog-admin-api-9001
sudo systemctl status java-blog-admin-api-9002

# 查看某个服务的所有日志(包括过去的日志)
sudo journalctl -u java-blog-admin-api-9001 -f
sudo journalctl -u java-blog-admin-api-9002 -f

# 确保java服务已经启动且没有报错,浏览器输入可以看见API接口文档。(没加context-path)
# http://117.72.63.33:9001/doc.html 
# http://117.72.63.33:9002/doc.html

拓展

部署多个实例

如果部署多个实例,需确保:

  • WorkingDirectory jar文件所在路径正确 (/usr/local/project/java/blog-admin-api)
  • .jar文件的完整路径正确 (/usr/local/project/java/blog-admin-api/blog-admin-0.0.1-SNAPSHOT.jar)
  • 端口不同(--server.port=9002
  • 日志路径不同(/var/log/blog-admin-api-9002.log
  • SyslogIdentifier 系统日志唯一(如 blog-admin-api-9002

如果部署多个同一实例、建议先部署好一个、然后复制粘贴、替换全部端口。

查看java服务端口
bash 复制代码
sudo netstat -tuln -p | grep java
删除服务
bash 复制代码
# 停止服务
sudo systemctl stop java-blog-admin-api-9001
# 禁用服务开机自启动
sudo systemctl disable java-blog-admin-api-9001
# 删除服务文件
sudo rm /etc/systemd/system/java-blog-admin-api-9001.service

# 重新加载 systemd 配置
sudo systemctl daemon-reload

# 清理日志文件(如果有)
sudo rm /var/log/java-blog-admin-api-9001.log

# 清理工作目录(如果有)
sudo rm -rf /usr/local/project/java/blog-admin-api/blog-admin-api-9001

# 清理用户和组(如果有)
sudo userdel -r smallhui
.service文件更新
bash 复制代码
# 如果你修改了 java-blog-admin-api-9001.service 文件
# 重新加载 systemd 配置
sudo systemctl daemon-reload
# 重启服务
sudo systemctl restart java-blog-admin-api-9001
# 检查服务状态
sudo systemctl status java-blog-admin-api-9001
查看日志⭐⭐⭐
bash 复制代码
# 查看某个服务的所有日志(包括过去的日志)
sudo journalctl -u java-blog-admin-api-9001 -f
# 仅显示 info 级别的日志 6为info
sudo journalctl -u java-blog-admin-api-9001 -f --priority=6
# 查看 error(3) 和 info(6) 级别的日志
sudo journalctl -u java-blog-admin-api-9001 -f --priority=3..6
# 查询过去 24 小时的日志
sudo journalctl -u java-blog-admin-api-9001 --since "1 day ago"
# 查询过去 1 小时的日志
sudo journalctl -u java-blog-admin-api-9001 --since "1 hour ago"
# 查询特定日期和时间的日志
sudo journalctl -u java-blog-admin-api-9001 --since "2024-06-01 00:00:00" --until "2024-06-01 23:59:59"
# 查询特定日期和时间的error(3)日志
sudo journalctl -u java-blog-admin-api-9001 --since "2024-06-01 00:00:00" --until "2024-06-01 23:59:59" --priority=3

# 日志级别说明
# journalctl 使用以下日志级别(从高到低):
# 0 - emerg(紧急)
# 1 - alert(警报)
# 2 - crit(严重)
# 3 - error(错误)
# 4 - warning(警告)
# 5 - notice(通知)
# 6 - info(信息)
# 7 - debug(调试
相关推荐
IC 见路不走1 小时前
LeetCode 第91题:解码方法
linux·运维·服务器
翻滚吧键盘1 小时前
查看linux中steam游戏的兼容性
linux·运维·游戏
小能喵1 小时前
Kali Linux Wifi 伪造热点
linux·安全·kali·kali linux
光军oi2 小时前
java微服务(Springboot篇)——————IDEA搭建第一个Springboot入门项目
java·spring boot·微服务
汀沿河2 小时前
8.1 prefix Tunning与Prompt Tunning模型微调方法
linux·运维·服务器·人工智能
zly35002 小时前
centos7 ping127.0.0.1不通
linux·运维·服务器
小哥山水之间3 小时前
基于dropbear实现嵌入式系统ssh服务端与客户端完整交互
linux
ldj20203 小时前
2025 Centos 安装PostgreSQL
linux·postgresql·centos
猴哥源码3 小时前
基于Java+SpringBoot的健身房管理系统
java·spring boot
翻滚吧键盘3 小时前
opensuse tumbleweed上安装显卡驱动
linux