java - 后台 Java 服务应用程序的简单发送/接收接口(interface)

标签 java linux shell user-interface service

我有一个 headless Java 应用程序,它永远在后台运行,我想就像一个服务/守护进程。它在 Linux 上运行并收集数据,将其存储在数据库中,连续循环。

它是通过 init.d 脚本启动和停止的。它会在系统启动时启动在后台运行的 jar,并在系统关闭时通过杀死特定的 java 进程来停止它。另外,我可以访问此脚本来手动启动/停止,如下所示:

sudo service my-java-app stop

尽管很原始,但这已经足够了。但现在我希望使用更优雅的界面。这将允许我发送命令(即更改数据采集频率和友好终止),并请求数据(即健康检查和统计)。

我以前从未这样做过,我正在寻找一些关于从哪里开始的指导。该应用程序在 headless Linux 的后台运行,因此 GUI 不适合。我想过运行一个 http 服务器并监听 POST 和 GET,但这在 bash 中实现或使用并不简单。我认为可能有一个虚拟 COM 端口或我可以创建的东西?或者甚至是我写入并且应用程序定期读取的文本文件?

我认为最终目标是一种在 bash 中执行命令的方法,并让 java 应用程序以某种方式监听/附加到此。

最佳答案

我曾经在 Java 代码中使用套接字完成过此操作。 Java 应用程序作为客户端或守护程序运行。 main() 入口点检查套接字是否打开,以了解守护进程是否已在运行。您可以使用 CLI 参数来说明是否要启动守护程序或发送命令。

  • 在守护进程启动时,您在特定端口上打开一个套接字
  • 在另一次启动时,您检查该特定端口上的套接字是否打开,如果打开则向其发送消息。

注意:这意味着选择一个固定端口,顺便说一句我不喜欢它。

关于java - 后台 Java 服务应用程序的简单发送/接收接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22981420/

相关文章:

java - MyBatis 3 + PostgreSQL - 在插入时获取主键值

java - invokeAndWait 似乎会导致应用程序间歇性卡住

c++ - 混合 c 和 c++ 库(多 Unix 平台)

c++ - 使用 BHO 扩展 Windows 资源管理器

linux - 获取 shell 脚本的 pid 并将其保存到一个锁定文件中

java - 如何在 REST API 中将驼峰式大小写转换为带下划线的小写?

java - 我们如何使用 JPA 计算最后一页?

linux - 从 git 中删除不存在的文件

Linux 消息到所有终端

android - 在 Android 终端中运行 Python for Android (Qpython)