”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何在 Linux 系统上将 Java 应用程序作为服务运行?

如何在 Linux 系统上将 Java 应用程序作为服务运行?

发布于2024-11-07
浏览:156

How can I run my Java application as a service on a Linux system?

Linux 系统服务导航:将 Java 应用程序作为服务运行

在 Linux 系统管理领域,将应用程序作为服务进行管理对于确保其可靠且受控的执行至关重要。本文深入探讨了将 Java 服务器应用程序配置为在 Linux 操作系统上作为服务运行的过程,为用户提出的问题提供了全面的解决方案。

主要目标是创建一个服务允许无缝启动、停止和重新启动 Java 应用程序,无需重新启动服务器。通过使用简单的包装脚本并利用 Linux 系统服务的功能,我们实现了这一目标。

开始旅程:初始配置

为了启动设置过程,需要编写一个 shell 脚本来处理将 Java 应用程序作为服务运行所需的各种操作。该脚本充当中间件,根据收到的命令编排应用程序的行为。

#!/bin/sh
SERVICE_NAME=MyService
PATH_TO_JAR=/usr/local/MyProject/MyJar.jar
PID_PATH_NAME=/tmp/MyService-pid
case $1 in
    start)
        # Code block to start the service
    ;;
    stop)
        # Code block to stop the service
    ;;
    restart)
        # Code block to restart the service
    ;;
esac

在此包装器脚本中,定义了以下函数:

  • start:使用“nohup”命令启动 Java 应用程序,这可确保应用程序正常运行即使 shell 终止后仍继续运行。进程 ID (PID) 被捕获并存储在指定的 PID 文件中以供将来参考。
  • stop:通过向从 PID 检索到的 PID 发送终止信号来终止正在运行的 Java 应用程序文件。然后删除 PID 文件。
  • restart:结合停止和启动操作,有效地重新启动 Java 应用程序。

完美执行:将脚本嵌入到系统服务

包装脚本就位后,需要将其集成到 Linux 系统服务机制中。 “init.d”或“systemd”(对于 Ubuntu 16)脚本通常用于此目的。按照链接的教程指导您完成此集成过程。

日志输出的其他注意事项

默认情况下,包装器脚本会抑制 Java 应用程序的标准输出,以避免系统日志中出现混乱。但是,如果需要日志检索,可以通过在“nohup”命令中将“2>&1”重定向替换为“>> myService.out 2>&1&”来修改此行为。

采用这种综合方法,在 Linux 上运行 Java 应用程序作为服务现在是一件简单的事情。提供的包装脚本和系统服务集成技术使您能够获得有效管理应用程序所需的灵活性和控制力。

最新教程 更多>
  • 如何处理 MySQL 存储过程中的“错误 1329:无数据 - 获取零行”?
    如何处理 MySQL 存储过程中的“错误 1329:无数据 - 获取零行”?
    存储过程中无数据警告:“错误 1329:获取、选择或处理零行”在数据库编程中,存储过程通常用于封装复杂的操作并确保数据完整性。然而,有时这些过程可能会遇到错误或产生意外的警告。一个常见问题是“错误 1329:无数据 - 提取、选择或处理零行”消息。当存储过程未显式处理没有返回数据的情况时,通常会出现...
    编程 发布于2024-11-07
  • 你真的了解Git吗?
    你真的了解Git吗?
    本博客中的图片来自 Scott Chacon、Ben Straub 的“Pro Git” 在本博客中,您将了解有关您在编程中使用的 Git 中的一些日常功能的各种精彩事实! 开发人员很容易盲目使用工具而不知道它们在幕后是如何工作的。虽然这种抽象是为了更好,但了解事物如何工作有时可能是经验丰富的程...
    编程 发布于2024-11-07
  • 浓缩咖啡;出发时间到了
    浓缩咖啡;出发时间到了
    过去的两周里,我用 Go 重写了我的基于 Rust 的 Java 构建工具,事情进展得更快。 Espresso 运行速度更快且更便携。 Espresso 最近还能够编译和打包它的第一个项目,即我的另一个项目 Kindling。 我希望能得到有关 Espresso 的任何反馈。有很多功能缺失,例如瞬态...
    编程 发布于2024-11-07
  • 为什么我的 JSFiddle 无法运行?
    为什么我的 JSFiddle 无法运行?
    调试无功能的 JSFiddle尝试在 JSFiddle 中运行简约代码片段时,用户可能会遇到意外的功能缺失。此问题通常是由于 JavaScript 设置中的疏忽而引起的。要解决此问题,请按照下列步骤操作:在 JavaScript 设置中找到“加载类型”下拉列表。选择“无换行 - 底部”。此设置可确...
    编程 发布于2024-11-07
  • GenAI Git 提交
    GenAI Git 提交
    生成 git 提交消息很快成为开发人员的经典 GenAI 应用程序。 为了解决这个问题,我们将制作一个 GenAIScript 脚本。 该脚本充当常规 Node.js 自动化脚本并使用 runPrompt 向 LLM 发出呼叫并要求用户确认生成的文本。 ? 解释脚本 脚本首先从 @...
    编程 发布于2024-11-07
  • 什么是 Webhook 以及如何有效使用它们
    什么是 Webhook 以及如何有效使用它们
    Webhooks 是集成不同系统并实时发送通知的强大工具。它们允许一个应用程序在事件发生时自动通知另一个应用程序,而无需像传统 API 那样不断发出请求来检查是否有新内容。在这篇文章中,我们将了解它们的工作原理、如何配置它们,并且我们将探索使用 Webhook.site 工具的实际示例,该工具有助...
    编程 发布于2024-11-07
  • 创建 JS 函数以删除给定字符串中的空格。 (使用核心js而不是内置的修剪功能。)
    创建 JS 函数以删除给定字符串中的空格。 (使用核心js而不是内置的修剪功能。)
    const trim = (string) => { let strArr = string.split(""); let trimedStr = []; strArr.forEach((item) => { if (item !== " ") { ...
    编程 发布于2024-11-07
  • GlobalErrorHandler:捕获从 ErrorBoundary 手中落下的错误!
    GlobalErrorHandler:捕获从 ErrorBoundary 手中落下的错误!
    ErrorBoundary 是一个出色的工具,可以捕获 React 组件抛出的错误。您可以根据错误本身的性质和位置提供自定义错误消息。但并非所有抛出的错误都由 ErrorBoundary 处理!你用这些做什么? 当考虑异步错误和从 React 外部抛出的错误时,ErrorBoundary 不够。为了...
    编程 发布于2024-11-07
  • 如何在Visual Studio 2008中设置可执行文件图标?
    如何在Visual Studio 2008中设置可执行文件图标?
    在 Visual Studio 2008 中设置可执行文件图标虽然提供的参考主要针对 Visual Studio 2010,但在 Visual Studio 中设置可执行文件图标的原则Studio 2008 基本上都适用。但是,需要记住一些具体的注意事项:使用 .ico 文件您必须为可执行图标使用 ...
    编程 发布于2024-11-07
  • 导入大型 SQL 文件:为什么使用 MySQL 控制台而不是 phpMyAdmin?
    导入大型 SQL 文件:为什么使用 MySQL 控制台而不是 phpMyAdmin?
    在 phpMyAdmin 中导入大型 SQL 文件:另一种方法尝试直接通过 phpMyAdmin 导入大量 SQL 文件可能会遇到限制。不过,有一个可靠的替代方法,即利用 MySQL 控制台。根据提供的建议,通过 MySQL 控制台导入 SQL 文件可以绕过 phpMyAdmin 中遇到的问题。此方...
    编程 发布于2024-11-07
  • 使用 JSON-LD 提升博客的 SEO:我如何使用结构化数据添加丰富的结果
    使用 JSON-LD 提升博客的 SEO:我如何使用结构化数据添加丰富的结果
    Introduction A few years ago in 2022, I attended SCaLE 19x. For those who are not aware, SCaLE is an acronym which stands for Southern Califo...
    编程 发布于2024-11-07
  • create-next-app 使用此包验证您的应用程序名称
    create-next-app 使用此包验证您的应用程序名称
    在本文中,我们分析 create-next-app 如何验证您的项目名称。 validate: (name) => { const validation = validateNpmName(basename(resolve(name))) if (validation.valid) { ...
    编程 发布于2024-11-07
  • 幕后反应:到底发生了什么?
    幕后反应:到底发生了什么?
    React 长期以来一直是首选的 JavaScript 库,并且很容易成为世界上最受欢迎的库之一。此外,随着 Next.js 和 Remix 等流行框架构建在 React 之上,以及使用 React-Native 进行移动开发的能力,这个库不会很快消失。然而,这样做的问题是,大多数初学者都涌向 Re...
    编程 发布于2024-11-07
  • 使用 Tinder Unblur 个人资料
    使用 Tinder Unblur 个人资料
    Tinder 取消模糊代码说明 以下 JavaScript 代码是一个脚本,旨在对“喜欢你”部分中的 Tinder 照片进行取消模糊处理。它的工作原理是从 Tinder 的 API 获取预告图像并动态更新 DOM 以用清晰的图像替换模糊的图像。 async function unb...
    编程 发布于2024-11-07
  • 如何确保网站安全:最佳实践和见解
    如何确保网站安全:最佳实践和见解
    在当今的数字时代,确保网站的安全至关重要。随着网络威胁变得越来越复杂,保护您的网站免受潜在漏洞的影响至关重要。以下是增强网站安全性的一些关键做法,以及特定网站 HouseOfParty.com 如何在其利基市场中举例说明安全做法。 使用 HTTPS 描述:HTTPS(安全超文本传输​​协议)对用户和...
    编程 发布于2024-11-07

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3