当前位置: 首页 > news >正文

在 Linux 上实现 Spring Boot 程序的自动启动与守护运行

一、背景概述

在生产环境中部署 Spring Boot 应用时,开发者常常会面临以下问题:

  • 服务器重启后程序不会自动恢复;

  • 手动执行 java -jar 需要登录终端;

  • 应用崩溃后无人值守无法自动重启;

  • 日志输出被系统清理或丢失。

为了解决这些问题,我们通常需要将 Spring Boot 程序配置为 Linux 系统服务(Systemd Service),使其具备“自动启动 + 守护运行 + 日志独立管理”的能力。


二、基本环境说明

假设系统环境如下(可根据实际修改):

项目路径或配置
Spring Boot Jar 包/data/cloud/nbsaas-mall2-front.jar
Java 路径/data/tool/jdk-21.0.5+11/bin/java
日志目录/data/cloud/logs
启动 Profileprod

三、启动命令验证

在配置自启之前,应先手动验证程序能否正常运行:

/data/tool/jdk-21.0.5+11/bin/java \-Xms512m -Xmx1024m -Dfile.encoding=UTF-8 \-jar /data/cloud/nbsaas-mall2-front.jar \--spring.profiles.active=prod

若能正常启动并访问接口,则说明环境正确,接下来即可配置自动启动。

四、创建 systemd 服务

1. 新建服务文件

执行命令:

sudo vim /etc/systemd/system/nbsaas-mall2-front.service

写入以下内容:

[Unit]
Description=Nbsaas Mall2 Front Spring Boot Service
After=network.target[Service]
User=root
WorkingDirectory=/data/cloud
ExecStart=/data/tool/jdk-21.0.5+11/bin/java \-Xms512m -Xmx1024m -Dfile.encoding=UTF-8 \-jar /data/cloud/nbsaas-mall2-front.jar \--spring.profiles.active=prod
SuccessExitStatus=143
Restart=always
RestartSec=5
StandardOutput=append:/data/cloud/logs/nbsaas-mall2-front.out
StandardError=append:/data/cloud/logs/nbsaas-mall2-front.err
Environment=JAVA_HOME=/data/tool/jdk-21.0.5+11
Environment=PATH=/data/tool/jdk-21.0.5+11/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin[Install]
WantedBy=multi-user.target

说明:

  • WorkingDirectory 指定工作目录;

  • Restart=always 保证程序异常退出后自动重启;

  • StandardOutputStandardError 分别保存标准输出与错误日志;

  • Environment 明确指定 Java 环境路径,避免开机后环境变量丢失。

2. 启用并启动服务

执行以下命令:

sudo mkdir -p /data/cloud/logs
sudo chmod 755 /data/cloud
sudo systemctl daemon-reload
sudo systemctl enable nbsaas-mall2-front.service
sudo systemctl start nbsaas-mall2-front.service
sudo systemctl status nbsaas-mall2-front.service

如果输出中显示 Active: active (running),说明服务已成功启动并在后台运行。

五、常用管理命令

操作命令
启动服务systemctl start nbsaas-mall2-front
停止服务systemctl stop nbsaas-mall2-front
重启服务systemctl restart nbsaas-mall2-front
查看状态systemctl status nbsaas-mall2-front
查看日志journalctl -u nbsaas-mall2-front -f

提示:-f 参数可实时追踪日志输出。

六、可选增强配置

1. 独立环境变量文件

将应用运行所需环境变量写入外部文件:

sudo vim /etc/sysconfig/nbsaas-mall2-front

内容示例:

SPRING_PROFILES_ACTIVE=prod
JAVA_HOME=/data/tool/jdk-21.0.5+11
PATH=$JAVA_HOME/bin:$PATH

修改服务文件添加:

EnvironmentFile=-/etc/sysconfig/nbsaas-mall2-front

这样无需修改主服务文件即可独立调整配置。


2. 指定配置文件路径

如果 Spring Boot 配置文件不在默认位置,可在启动参数中指定:

--spring.config.location=/data/cloud/config/application-prod.yml

七、验证开机自动启动

重启服务器:

sudo reboot

系统重启后,验证服务是否自动运行:

systemctl status nbsaas-mall2-front

如状态为 active (running),则说明自动启动配置成功。


八、常见问题排查

问题原因解决方法
“Failed to determine a suitable driver class”数据源配置文件未加载在服务中显式声明 --spring.profiles.active--spring.config.location
日志未生成日志目录权限不足确保 /data/cloud/logs 拥有可写权限
启动后端口未监听启动 profile 错误检查环境变量是否正确加载
systemd 报错 “ExecStart=/usr/bin/java: not found”Java 路径未设置使用 Environment=JAVA_HOME=... 明确路径

九、结语

通过使用 systemd 服务管理,Spring Boot 程序能够:

  • 随系统自动启动;

  • 崩溃后自动重启;

  • 独立日志输出;

  • 可统一管理、可远程控制。

相比传统的 nohup java -jar & 方式,systemd 更加稳定、安全、可维护,是生产环境中推荐的运行方式。

http://www.dtcms.com/a/596657.html

相关文章:

  • 得物TiDB升级实践
  • uni-app微信小程序相机组件二次拍照白屏问题的排查与解决
  • 邯郸大名网站建设网站服务器类型查询
  • 远程在线诊疗|在线诊疗|基于java和小程序的在线诊疗系统小程序设计与实现(源码+数据库+文档)
  • Linux进程间通信(IPC)常用方法精要
  • 展望无人机的未来发展,技术趋势和应用前景
  • 黄页 网站模板什么是展示型网站
  • gov域名网站有哪些如何建一个免费试用网站
  • Vue中 class 和 style 属性的区别对比
  • 视频融合平台EasyCVR:构建智慧化城市/乡镇污水处理厂综合安防与运营监管方案
  • 【ZeroRange WebRTC】KVS WebRTC C SDK 崩溃分析报告
  • 库卡机器人编程语言 | 深入了解库卡机器人的编程方法与应用
  • 移动+协作+视觉=?复合型机器人重新定义智能产线
  • 【macOS 版】Android studio jdk 1.8 gradle 一键打包成 release 包的脚本
  • 网站关键词优化原理亳州做企业网站
  • 数据库知识整理——SQL数据定义
  • AAAI 2026|港科大等提出ReconVLA:利用视觉重构引导,刷新机器人操作精度!(含代码)
  • Java 进阶:IO 流与 Lambda 表达式深度解析
  • 集团公司网站推广方案怎么做十年网站建设
  • 张祥前统一场论视角下的托卡马克Z箍缩不稳定性解读
  • 【每天一个AI小知识】:什么是MCP协议?
  • 在 kubernetes 上使用 SMB 协议做存储的「即插即用」方案
  • 软件测试大赛Web测试赛道工程化ai提示词大全
  • 智慧团建官方网站登录入口优秀的网站建设价格
  • 静海做网站公司十一月新闻大事件摘抄
  • GJOI 11.6 题解
  • Java Excel 导出:EasyExcel 使用详解
  • 【SOMEIP】【R24-11】【需求翻译】[RS_SOMEIP_00002]-[RS_SOMEIP_00004]
  • VMware无法将网络更改为桥接状态:没有未桥接的主机网络适配器
  • maven打包问题/ClassNotFoundException异常