Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
后台Java服务应用程序的简单发送/接收接口_Java_Linux_Shell_User Interface_Service - Fatal编程技术网

后台Java服务应用程序的简单发送/接收接口

后台Java服务应用程序的简单发送/接收接口,java,linux,shell,user-interface,service,Java,Linux,Shell,User Interface,Service,我有一个永远在后台运行的无头Java应用程序,我想它就像一个服务/守护进程。它在Linux上运行,在连续循环中收集数据,存储在数据库中 它使用init.d脚本启动和停止。它在系统启动时启动后台运行的jar,并在系统关闭时通过终止特定的java进程来停止它。另外,我可以访问此脚本手动启动/停止,如下所示: sudo service my-java-app stop 尽管很原始,但这已经足够了。但现在我希望使用更优雅的界面。这将允许我发送命令(即更改数据采集频率和友好终止),并请求数据(即健康检查

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

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

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

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


我想象最终的目标是在bash中执行命令的方法,并让java应用程序以某种方式监听/连接到它。

我曾经在java代码中使用socket这样做过一次。Java应用程序作为客户端或守护进程运行。
main()
入口点检查套接字是否打开,以了解守护进程是否已经在运行。您可以使用CLI参数来确定是否要启动守护程序或发送命令

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

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

netcat呢?你可以发送任何东西,并用一个简单的脚本包装。这很容易。我认为这取决于你想如何发出请求:如果你想从其他计算机/设备访问,只需使用浏览器,使用HTTP GET/POST似乎是正确的选择。您可以使用
curl
从命令行访问。但如果你不想远程访问,也许这是overkill@rpaxnetcat是Linux程序,对吗?你是建议我用ProcessBuilder或类似的东西来包装它吗?我假设我会在bash中运行netcat命令来建立通信。@PabloLozano我认为httpget/POST对于远程应用非常方便。我发现了一个名为的简单服务器,以及一个更简单的调用方,因此考虑到让服务器运行有多么容易,这可能并不过分。我认为这将是一个非常通用的方法。@Darian不,我的意思是打开一个简单的套接字,然后执行类似于:echo“some command to parsed”| nc localhost的操作……这可能是一个很好的解决方案,但如果您有时间的话,我有几个初学者问题:套接字是Java独有的吗?另一个外部应用程序可以与此对话吗?数据传输的协议或格式是什么?我正在设想一个Java控制台客户端,它很整洁,但是如果它可以被bash脚本或其他应用程序访问,那就更好了。@Darian Sockets不是Java特有的,它是一种实现IPC的方法。如果您的Java守护进程通过套接字监听远程命令,那么您可以从我认为的任何接口发送命令。老实说,我并不完全了解这一点,但你可能会在互联网上找到很多关于套接字的东西。@Darian顺便说一句,按照我在旧程序中的做法,我实际上是通过命令行发送命令的。Java不需要UI;)我一直在阅读我不熟悉的IPC(对于其他不熟悉的人来说,“IPC”是)。看起来它能满足我的要求。谢谢你的帮助。我还喜欢其他建议,如HTTP for future,因为我认为这对于基于Web页面/JavaScript的远程界面来说更容易实现。