文强的博客

  • Python
  • Linux
  • 建站教程
  • 百度一下
登高望远
无愧于心,不困与情,不念过去,无畏将来
  1. 首页
  2. Java
  3. 正文

💻 让Spring Boot应用在Linux系统上优雅运行:使用Systemd Service并完美保留日志 📝

2025年7月12日 204点热度 0人点赞 0条评论

嘿,开发者小伙伴们!🚀 想象一下,你的Spring Boot应用像一个专业的服务人员一样,在Linux服务器上稳定运行,还能把日志记录得整整齐齐,让你随时查阅。为什么用Systemd?因为它让应用启动、重启和监控变得轻松如丝滑般顺畅,不再担心后台进程悄悄崩溃。今天,我来一步步指导你如何将Java打包的Spring Boot应用变成一个Systemd服务,并确保日志永不丢失。准备好了吗?Let's dive in! 🏊‍♂️

🔍 前提条件:准备好了再出发

在开始前,确保你的环境已经就绪:

  • Linux系统 (如Ubuntu或CentOS),已经安装了Java (JDK 11+ 👌)。
  • 一个Spring Boot项目,打包后的可执行JAR文件(常用Maven命令:mvn clean package 🏗️)。
  • 拥有sudo权限的账户(别担心,这不是火箭科学)。

提醒:如果你的Spring Boot应用使用内嵌Tomcat,这方法超级适用。我们假设你的JAR文件叫my-app.jar,放在/opt/myapp/目录下。

📦 步骤1:打包你的Spring Boot应用

首先,确保应用被打包成一个“fat JAR”(可执行的JAR文件)。在项目根目录下,运行:

❏ 复制
# Using Maven
mvn clean package
# OR with Gradle
./gradlew bootJar

这会在target/目录下生成一个JAR文件,比如my-app-0.0.1-SNAPSHOT.jar。别忘了移动到服务器目录:

❏ 复制
sudo mkdir -p /opt/myapp
sudo cp target/my-app-0.0.1-SNAPSHOT.jar /opt/myapp/my-app.jar

小贴士:📌 使用绝对路径避免后续配置问题。

🔧 步骤2:创建Systemd Service文件

现在,我们创建Systemd服务文件。打开一个新的service文件:

❏ 复制
sudo nano /etc/systemd/system/myapp.service

复制粘贴以下内容(自定义部分用注释标出):

❏ 复制
[Unit]
Description=My Awesome Spring Boot Application 🌟
After=syslog.target network.target  # 确保在网络启动后运行

[Service]
User=yourusername  # 替换为运行用户的用户名,如'ubuntu'
ExecStart=/usr/bin/java -jar /opt/myapp/my-app.jar  # 🧩 指定JAR路径和Java命令
SuccessExitStatus=143  # Spring Boot常用退出状态
Restart=always  # 崩溃时自动重启
RestartSec=10  # 重启等待10秒
StandardOutput=syslog  # 发送日志到syslog
StandardError=syslog
SyslogIdentifier=myapp  # 日志标识符

[Install]
WantedBy=multi-user.target  # 使服务在启动时自动运行

保存文件后,运行:

❏ 复制
sudo systemctl daemon-reload
sudo systemctl enable myapp.service  # 开启自启动
sudo systemctl start myapp.service   # 启动服务

恭喜!🎉 你的应用现在作为服务运行了。用sudo systemctl status myapp.service检查状态。

📝 步骤3:完美配置日志保留

默认情况下,Systemd使用journalctl管理日志,但我们要确保它们持久化不丢失。以下是配置:

  1. 启用日志rotation: Journald默认管理日志,只需添加配置。编辑journald配置文件:
❏ 复制
sudo nano /etc/systemd/journald.conf

确保这些行存在(如果没有则添加):

❏ 复制
[Journal]
Storage=persistent  # 🔒 让日志持久化
SystemMaxUse=100M   # 限制总日志大小
MaxRetentionSec=1month  # 保留一个月日志

重启journald:sudo systemctl restart systemd-journald。

  1. 查询应用日志: 用journalctl检查日志:
❏ 复制
journalctl -u myapp.service -f  # -f是实时跟踪,tail logs的酷版

小技巧:📚 需要自定义日志文件?在Spring Boot中使用logging配置输出到文件,但Systemd方式更简单!

🛠️ 步骤4:测试和调试

启动服务后,测试是否工作:

  • sudo systemctl restart myapp.service:应用重启。
  • 模拟崩溃:用kill命令终止进程,Systemd会自动重启它(感谢Restart设置 😅)。

问题?检查日志或重启Systemd:sudo systemctl daemon-reload && sudo systemctl restart myapp.service。

🎯 结论:你的应用现在是Systemd小能手

搞定啦!✨ 通过简单的配置文件,你的Spring Boot应用已经升级为Systemd服务,日志自动保留、崩溃自动修复。这不再只是一个后台进程——它像个专业管家,24/7待命。无论是开发环境还是生产服务器,这方法都值得一试。

最佳实践提醒:🔔 定期更新日志rotation设置,确保磁盘不爆满。下次我们聊聊如何整合logrotate和外部日志服务。现在,去部署你的应用吧,让它飞起来!🚀 有疑问?评论区见——我是你的Java朋友!👋

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: Linux Spring
最后更新:2025年7月12日

文强

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

归档

  • 2025 年 7 月

分类

  • Java
  • Linux
  • 建站教程
  • 技术文章

COPYRIGHT © 2025 文强的博客. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

赣ICP备2021010953号-3