【发布时间】:2011-05-06 15:13:29
【问题描述】:
如何将一些值从 shell 脚本传递给已经运行的 Java 程序?
【问题讨论】:
-
@ssbecse 您似乎激怒了下面的许多评论者,他们以一种使他们完全有效的答案无效的方式修改了问题。 %-|请下次更清楚。我们在这里不是读心术,不是免费的。
-
原问题改了。发布原始问题时,我的回答是有效的。
如何将一些值从 shell 脚本传递给已经运行的 Java 程序?
【问题讨论】:
独立的 Java 应用程序已经在运行,所以命令行参数是没有问题的。
剩下的最简单的选择是轮询文件、套接字和 HTTP 服务器。
轮询文件:
让您的 Java 应用在几秒钟内读取一次特定目录。如果该目录中出现文件,请阅读它并按照它说的做。制作你的 shell 脚本来形成那个文件。
套接字:
让您的 java 应用程序在套接字上侦听。使用 netcat 或类似的实用程序向该套接字发送命令。
HTTP 服务器:
在 Java 进程中启动 HTTP 侦听器。使用 wget 或类似实用程序将您的命令发布到该侦听器:
HttpServer httpServer = HttpServer.create(new InetSocketAddress(port), 5);
httpServer.createContext("/", new TileServerRequestHandler());
httpServer.setExecutor(Executors.newCachedThreadPool());
httpServer.start();
【讨论】:
将参数写入您的进程定期询问的文件?粗鲁,但它会起作用(但有很多使用限制)。 或者让您的进程在套接字上侦听并让您的 shell 脚本将参数发送到套接字。
【讨论】:
与 Java 进程通信的一个选项是Java Messaging Service API。您的 shell 脚本可以启动 JMS 客户端以向主应用程序发送消息。
【讨论】:
查看如何将命令行参数传递给java here
编辑:问题中的新信息意味着这不再是一个合适的解决方案
【讨论】: