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(调试
相关推荐
rzl027 分钟前
SpringBoot总结
spring boot·后端·firefox
moxiaoran575323 分钟前
Springboot+MongoDB简单使用示例
spring boot·mongodb·spring
##echo38 分钟前
嵌入式Linux裸机开发笔记9(IMX6ULL)GPIO 中断实验(1)
linux·c语言·笔记·单片机·嵌入式硬件
Reggie_L1 小时前
RabbiteMQ安装-ubuntu
linux·ubuntu·ruby
小鱼人爱编程1 小时前
Java基石--反射让你直捣黄龙
前端·spring boot·后端
AIGC_北苏1 小时前
让UV管理一切!!!
linux·人工智能·uv
YCY^v^3 小时前
centos 7 开启80,443端口,怎么弄?
linux·运维·centos
北南京海3 小时前
[Linux]进程地址空间
linux·运维·服务器
愿你天黑有灯下雨有伞4 小时前
告别复杂配置!Spring Boot优雅集成百度OCR的终极方案
spring boot·百度·ocr
db_murphy5 小时前
Oracle数据块8KB、OS默认认块管理4KB,是否需调整大小为一致?
linux