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

【Linux下Java应用自动重启守护教程】

文章目录

  • Linux下Java应用自动重启守护教程
    • 前言
    • 适用场景
    • 准备工作
      • 1. 确认Java安装位置
      • 2. 确认应用文件位置
      • 3. 测试应用能否正常运行
    • 创建systemd服务
      • 1. 创建服务配置文件
      • 2. 编写配置内容
      • 3. 配置项说明(小白必看)
    • 启动和管理服务
      • 1. 重新加载配置
      • 2. 设置开机自启动
      • 3. 启动服务
      • 4. 查看服务状态
    • 常用管理命令
      • 服务状态管理
      • 查看日志
    • 自动重启机制说明
      • 什么情况下会自动重启?
      • 什么情况下不会重启?
    • 故障排除
      • 1. 服务启动失败
      • 2. 检查文件权限
      • 3. 测试自动重启功能
    • 进阶配置建议
      • 1. 创建专用用户(更安全)
      • 2. 添加环境变量
      • 3. 添加健康检查
    • 总结


Linux下Java应用自动重启守护教程

前言

在Linux服务器上部署Java应用时,经常会遇到程序意外退出的情况。本文将教你如何使用systemd创建一个自动重启的守护服务,让你的应用程序在异常退出后能够自动恢复运行。

适用场景

  • Java Web应用部署
  • 后台服务程序
  • 需要7×24小时运行的服务
  • 希望程序异常退出后自动重启

准备工作

1. 确认Java安装位置

whereis java

记住输出中的 /usr/bin/java 路径

2. 确认应用文件位置

假设你的应用文件结构如下:

/mnt/job/
├── syrasstbapi.jar          # 你的Java应用
└── syrasstbapijob.txt       # 日志输出文件

3. 测试应用能否正常运行

cd /mnt/job
java -jar syrasstbapi.jar --server.port=7781

创建systemd服务

1. 创建服务配置文件

sudo vim /etc/systemd/system/syrasstbapi.service

2. 编写配置内容

将以下内容复制到文件中(根据你的实际情况修改):

[Unit]
Description=SyrasstbapiJob Service
After=network.target[Service]
Type=simple
User=root
WorkingDirectory=/mnt/job
ExecStart=/usr/bin/java -jar syrasstbapi.jar --server.port=7781
Restart=on-failure
RestartSec=10
RestartMaxDelaySec=900
StartLimitInterval=300
StartLimitBurst=5
StandardOutput=append:/mnt/job/syrasstbapijob.txt
StandardError=append:/mnt/job/syrasstbapijob.txt[Install]
WantedBy=multi-user.target

3. 配置项说明(小白必看)

配置项说明
Description服务描述,随便起个名字
User运行服务的用户,这里用root
WorkingDirectory工作目录,你的jar包所在目录
ExecStart启动命令,注意java路径和jar包路径
Restart=on-failure异常退出时自动重启
RestartSec=10重启间隔10秒
StandardOutput标准输出日志文件路径
StandardError错误输出日志文件路径

启动和管理服务

1. 重新加载配置

sudo systemctl daemon-reload

2. 设置开机自启动

sudo systemctl enable syrasstbapi.service

3. 启动服务

sudo systemctl start syrasstbapi.service

4. 查看服务状态

sudo systemctl status syrasstbapi.service

正常运行时会显示绿色的"active (running)"状态。

常用管理命令

服务状态管理

# 查看状态
sudo systemctl status syrasstbapi.service# 启动服务
sudo systemctl start syrasstbapi.service# 停止服务
sudo systemctl stop syrasstbapi.service# 重启服务
sudo systemctl restart syrasstbapi.service# 设置开机自启动
sudo systemctl enable syrasstbapi.service# 取消开机自启动
sudo systemctl disable syrasstbapi.service

查看日志

# 实时查看日志
sudo journalctl -u syrasstbapi.service -f# 查看最近20行日志
sudo journalctl -u syrasstbapi.service -n 20# 查看最新日志
sudo journalctl -u syrasstbapi.service --since "10 minutes ago"

自动重启机制说明

什么情况下会自动重启?

当你的Java应用出现以下情况时,服务会自动重启:

  1. 程序异常退出(退出码非0)
  2. 未捕获的Java异常(如NullPointerException)
  3. 内存溢出(OutOfMemoryError)
  4. 程序崩溃
  5. 被系统信号终止

什么情况下不会重启?

  1. 正常停止(systemctl stop)
  2. 手动kill进程
  3. 系统关机

故障排除

1. 服务启动失败

# 查看详细错误信息
sudo journalctl -u syrasstbapi.service --no-pager

常见问题:

  • Java路径错误 → 确认 /usr/bin/java 是否正确
  • 文件路径错误 → 确认jar包路径是否正确
  • 权限问题 → 确认文件是否有执行权限

2. 检查文件权限

# 给予读写权限
sudo chmod 755 /mnt/job/syrasstbapi.jar
sudo chmod 666 /mnt/job/syrasstbapijob.txt

3. 测试自动重启功能

# 手动杀死进程(测试自动重启)
sudo pkill -9 -f syrasstbapi.jar# 等待10秒后查看是否重启
sudo systemctl status syrasstbapi.service

进阶配置建议

1. 创建专用用户(更安全)

# 创建专用用户
sudo useradd -r -s /bin/false appuser# 修改文件所有者
sudo chown -R appuser:appuser /mnt/job# 在服务文件中修改
User=appuser

2. 添加环境变量

如果需要设置Java环境变量,在服务文件中添加:

Environment="JAVA_OPTS=-Xmx1024m -Xms512m"

3. 添加健康检查

[Service]
# ... 其他配置
ExecStartPre=/bin/sleep 10
TimeoutStartSec=300

总结

通过以上步骤,你就成功创建了一个自动重启的Java应用守护服务。这个服务具有以下特点:

✅ 开机自动启动
✅ 异常自动重启
✅ 日志自动记录
✅ 简单的管理命令
✅ 防止无限重启循环

现在你的Java应用就可以稳定地在服务器上运行了,即使出现异常也会自动恢复,大大减少了人工维护的工作量。


提示:配置完成后,建议测试一下自动重启功能,确保一切正常工作后再正式使用。

http://www.lryc.cn/news/609623.html

相关文章:

  • 【大模型】3D因果卷积动图怎么画
  • Linux—yum仓库及NFS网络共享服务
  • [QMT量化交易小白入门]-七十六、从tick数据中获取高频交易的量价背离信号
  • 验证码等待时间技术在酒店自助入住、美容自助与社区场景中的应用必要性研究—仙盟创梦IDE
  • Dynamic Programming【DP】2
  • 9.感知机、神经网络
  • Antlr学习笔记 01、maven配置Antlr4插件案例Demo
  • 中标喜讯 | 安畅检测成功中标海南工信大脑(二期)软件测评服务
  • [Oracle] TO_NUMBER()函数
  • 【分享】拼团交易平台系统,分布式、高并发、微服务
  • 豆包1.6+PromptPilot实战:构建智能品牌评价情感分类系统的技术探索
  • Jetbrains IDE总是弹出“需要身份验证”窗口
  • uniapp 基础(三)
  • weapp-tailwindcss 已支持 uni-app x 多端构建
  • uniapp基础(四)性能优化
  • 使用opencv基于realsense D435i展示基本的图像
  • 计算机网络:有路由器参与的子网间通信原理
  • 阿里云与华为云产品的差异
  • 计算机网络:网络号和网络地址的区别
  • OpenCV轻松入门_面向python(第二章图像处理基础)
  • 从物理扇区到路径访问:Linux文件抽象的全景解析
  • Linux 网络深度剖析:传输层协议 UDP/TCP 原理详解
  • iostat 系统IO监控命令学习
  • 二叉树的概念以及二叉树的分类,添加,删除
  • OpenCV计算机视觉实战(18)——视频处理详解
  • Postman:配置环境变量
  • 【Unity3D实例-功能-镜头】第三人称视觉
  • VUE2 学习笔记17 路由
  • 算法训练营DAY50 第十一章:图论part01
  • 代码随想录day55图论5