Linux系统制作Java JAR程序为系统服务

news/2024/11/17 23:52:33/

在Linux系统中,将JAR程序制作成系统服务可以通过系统自带的systemd服务管理器来实现。systemd是现代Linux系统中广泛使用的初始化系统和服务管理器,它提供了强大的功能来管理系统的启动和服务

以下是将JAR程序制作成systemd系统服务的步骤,这些步骤展示了如何使用systemd这一“组件”(实际上是Linux系统的一个核心部分)来完成任务:

  1. 准备JAR程序

    • 确保你的JAR程序是可执行的,并且已经放置在Linux系统中的某个目录下。
  2. 创建systemd服务文件

    • 进入/etc/systemd/system目录。
    • 创建一个新的服务文件,例如myjarapp.service,其中myjarapp是你的服务名称。
  3. 编辑服务文件

    • 服务文件中添加以下内容,根据你的实际情况进行修改:
      [Unit]
      Description=My JAR Application Service
      After=syslog.target[Service]
      Type=simple
      ExecStart=/usr/bin/java -jar /path/to/your/application.jar
      WorkingDirectory=/path/to/your/application
      User=yourusername
      Group=yourgroupname
      Restart=on-failure[Install]
      WantedBy=multi-user.target
      
    • ExecStart:指定启动JAR程序的命令。
    • WorkingDirectory:指定JAR程序的工作目录(可选)。
    • UserGroup:指定运行JAR程序的用户和组(可选)。
    • Restart=on-failure:如果服务失败,则自动重启。
  4. 重新加载systemd配置

    • 运行sudo systemctl daemon-reload命令,以重新加载systemd的配置。
  5. 启动和管理服务

    • 启动服务sudo systemctl start myjarapp.service
    • 停止服务sudo systemctl stop myjarapp.service
    • 检查服务状态:sudo systemctl status myjarapp.service
    • 查看服务日志:journalctl -u myjarapp.service
  6. 设置开机自启动

    • 启用开机自启动:sudo systemctl enable myjarapp.service
    • 检查开机自启动状态:sudo systemctl list-unit-files | grep myjarapp.service

通过这些步骤,你可以将JAR程序制作成Linux系统的服务,并方便地进行管理和控制。这种方法利用了Linux系统自带的systemd功能,无需额外的组件或工具。

另外,但值得注意的是,使用systemd时,你可以通过编辑服务文件来灵活地配置服务的各种属性和行为,如依赖关系、启动顺序、资源限制等。这使得systemd成为一个强大且灵活的服务管理工具。

多说一句:
在systemd的服务文件中的[Service]节中,可以看到有ExecStart命令,但是却没有STOP命令。但这不影响systemd停止服务
systemd通过发送特定的信号给服务进程来请求它停止。这通常是通过向进程发送SIGTERM(终止信号)来实现的,如果进程没有在规定的时间内响应,systemd可能会发送SIGKILL(强制终止信号)来强制停止它。

在[Service]部分中,ExecStart命令用于启动服务,而停止服务的逻辑是由systemd内部处理的,基于服务的类型和运行状态。当你运行sudo systemctl stop myjarapp.service命令时,systemd会负责找到服务的进程ID(PID),并发送适当的信号来请求它停止。

对于Java应用程序(特别是那些作为JAR文件运行的),当接收到SIGTERM信号时,它们通常不会立即退出,因为Java虚拟机(JVM)默认不会立即响应这个信号。因此,你可能需要在你的Java应用程序中添加一些代码来监听这个信号,并优雅地关闭应用程序(例如,通过关闭数据库连接、释放资源、停止线程等)。这通常可以通过在Java应用程序中使用信号处理库或框架来实现,或者通过注册一个关闭钩子(shutdown hook)来响应JVM的关闭事件。

然而,如果你的Java应用程序没有处理SIGTERM信号的逻辑,那么systemd在发送SIGTERM后等待一段时间(这个时间可以通过TimeoutStopSec选项在服务文件中配置)后,将会发送SIGKILL信号来强制终止进程。

总之,尽管在systemd的服务文件中没有Stop命令,但systemd仍然能够停止服务,这是通过发送适当的信号给服务进程来实现的。对于Java应用程序,你可能需要在代码中添加一些逻辑来优雅地处理这些信号。


http://www.ppmy.cn/news/1547835.html

相关文章

2024-11-16 特殊矩阵的压缩存储

一、数组的存储结构 1.一维数组:各元素大小相同,且物理上连续存放。a[i]起始地址i*siezof(数组元素大小) 2.二维数组:b[j][j]起始地址(i*Nj)*sizeof(数组元素大小) 二、特殊矩阵 1.普通矩阵的存储:使用…

酷炫的鼠标移入效果(附源码!!)

预览效果 源码(htmljs部分) <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title>…

对称加密算法DES的实现

一、实验目的 1、了解对称密码体制基本原理 2、掌握编程语言实现对称加密、解密 二、实验原理 DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位&#xff0c;产生最大 64 位的分组大小。这是一个迭代的分组密码&#xff0c;使用称为 Feistel 的技术&#xff0c;其中将加密…

基于机器学习的虚拟传感器用于门开启检测和异常检测

论文标题&#xff1a;Virtual sensor for door opening detection and anomaly detection using machine learning&#xff08;基于机器学习的虚拟传感器用于门开启检测和异常检测&#xff09; 作者信息&#xff1a; Almir Neto&#xff0c;来自巴西马拉尼昂联邦教育、科学与…

前端传数组 数据库存Json : [1,2,3]格式

一、前端正常传数组&#xff0c;但是value.toString() 即可 const empIds ref([1,2,3]) empIds.value empIds.value.toString() await updateApiRules(empIds.value) // 接口传参 二、后端用String类型接收后转换 String[] empIds updateDO.getEmpId().split("&#x…

ssm113ssm框架的购物网站+vue(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;网上超市系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本网上超市系统就是在这…

【Python爬虫实战】轻量级爬虫利器:DrissionPage之SessionPage与WebPage模块详解

&#x1f308;个人主页&#xff1a;易辰君-CSDN博客 &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html ​ 目录 前言 一、SessionPage &#xff08;一&#xff09;SessionPage 模块的基本功能 &#xff08;二&#xff09;基本使…

MySQL:表设计

表的设计 从需求中获得类&#xff0c;类对应到数据库中的实体&#xff0c;实体在数据库中表现为一张一张的表&#xff0c;类中的属性就对应着表中的字段&#xff08;也就是表中的列&#xff09; 表设计的三大范式&#xff1a; 在数据库设计中&#xff0c;三大范式&#xff0…