【Linux】Java 服务生产级部署指南:实现常驻后台、开机自启与系统服务化管理

Java 服务生产级部署指南:完整执行步骤与配置项详解

在现代企业级应用架构中,确保 Java 应用程序能够在服务器后台稳定、持久地运行,是运维与部署工作的核心诉求。本文将系统性地梳理主流操作系统下 Java 服务化的最佳实践,并提供可直接落地的完整执行操作步骤与配置项。

一、 Linux 环境下的标准化部署方案(基于 systemd)

在 Linux 服务器环境中,使用 systemd 将应用注册为系统服务是目前业界公认的最规范、最稳定的标准方式。

1. 前置准备

确保 Java 运行环境已安装,并将打包好的 .jar 文件上传至服务器指定目录(例如 /home/service/)。

2. 创建并配置 .service 文件

/etc/systemd/system/ 目录下创建一个 .service 文件(例如 java-demo.service):

bash 复制代码
vi /etc/systemd/system/java-demo.service

写入以下完整配置项:

标准版本
bash 复制代码
[Unit]
Description=Java Demo Application
After=network.target mysql.service
Wants=network.target

[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/home/service/
ExecStart=/usr/bin/java -Xms512m -Xmx1024m -jar /home/service/java-demo.jar
ExecStop=/bin/kill -15 $MAINPID
ExecReload=/bin/kill -15 $MAINPID && /usr/bin/java -Xms512m -Xmx1024m -jar /home/service/java-demo.jar
Restart=on-failure
RestartSec=3s
TimeoutSec=30
SyslogIdentifier=java-demo

[Install]
WantedBy=multi-user.target
详细介绍版本
bash 复制代码
[Unit]
# 服务的简短描述,建议与文件名保持一致
Description=My Java Application
# 指定启动顺序:在网络服务启动后再启动此服务
After=network.target

[Service]
# 服务类型,simple 表示 ExecStart 启动的进程就是主进程
Type=simple
# 运行服务的用户(建议非 root 用户,提升安全性)
User=root
Group=root
# 工作目录,必须为 Jar 包所在的绝对路径
WorkingDirectory=/home/service/
# 启动命令:指定 java 路径、JVM 内存参数及 jar 包路径
ExecStart=/usr/bin/java -Xms512m -Xmx1024m -jar /home/service/java-demo.jar
# 优雅停止命令,发送 SIGTERM 信号让 Java 进程正常退出
ExecStop=/bin/kill -15 $MAINPID
# 异常退出时的重启策略:on-failure 表示仅在非正常退出时重启
Restart=on-failure
# 重启前的等待时间
RestartSec=3s
# 日志标识符,方便通过 journalctl 检索
SyslogIdentifier=java-demo

[Install]
# 指定在多用户命令行模式下开机自启
WantedBy=multi-user.target

授权执行

bash 复制代码
chmod +x  /etc/systemd/system/java-demo.service

3. 服务生命周期管理命令

配置完成后,依次执行以下命令完成部署:

bash 复制代码
# 1. 重载 systemd 配置(修改文件后必须执行)
systemctl daemon-reload

# 2. 启动服务
systemctl start java-demo

# 3. 设置开机自启
systemctl enable java-demo

# 4. 查看服务运行状态
systemctl status java-demo

# 5. 优雅停止服务
systemctl stop java-demo

# 6. 重启服务
systemctl restart java-demo

# 7. 取消开机自启
systemctl disable java-demo

# 8. 查看状态/日志
systemctl status java-demo

# 9.实时查看日志
journalctl -u java-demo -f

4. 日志排查命令

bash 复制代码
# 实时监控日志
journalctl -u java-demo.service -f

# 查看最新100行日志
journalctl -u java-demo.service -n 100

# 按时间筛选日志
journalctl -u java-demo.service --since "2026-06-11 00:00"



相关推荐
凡人叶枫1 小时前
Effective C++ 条款16:成对使用 new 和 delete 时要采取相同形式
开发语言·c++·effective c++
JAVA面经实录9172 小时前
Netty 全套系统化学习文档(零基础到高阶面试完整版)
java·后端
weixin_523185322 小时前
Java面试高频题:Integer缓存机制与 equals、== 区别
java·缓存·面试
不吃土豆的马铃薯2 小时前
C++ 高性能网络缓冲区 Buffer 源码解析
linux·服务器·开发语言·网络·c++
数据法师2 小时前
QuickSay :基于 Qt 的轻量级快捷短语管理工具
开发语言·qt
Hui Baby2 小时前
MCP SSE协议发送注意
java
仙俊红2 小时前
SpringBoot启动原理
java·spring boot·后端
caimouse2 小时前
Reactos 第1章 概述
c语言·开发语言·架构
星间都市山脉2 小时前
Android STS(Security Test Suite)完整介绍与测试流程
android·java·linux·windows·ubuntu·android studio·androidx