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+C → exit |
先停止程序再退出会话 |
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(调试