【问题标题】:Communicate with app via command line通过命令行与应用程序通信
【发布时间】:2017-02-13 21:53:06
【问题描述】:

我目前正在试验一个 java“服务器应用程序”,它应该在 ubuntu 服务器的后台运行。
当前的系统并不完美,这就是为什么我想在一个新系统上工作...
目标是在后台运行 java 应用程序(通过 nohup 或 linux 服务),并且仍然能够执行命令(停止状态等)来控制此应用程序的行为。
我想创建一个服务器套接字,它正在侦听 localhost,这使我能够编写一个 java“客户端”应用程序,它将命令发送到服务器并随后终止......
我的问题是,是否可以避免使用这样的“客户端”应用程序。
如果我只是有办法仅使用 bash 将字符串发送到服务器(例如,包括 curl 等工具),那将是理想的。 这可能吗?
我计划的系统是一个好的计划吗?

感谢任何帮助!

【问题讨论】:

  • 请注意,JMX 允许您使用 jconsole 和 visualvm 等标准工具在运行的 JVM 中调用方法。

标签: java linux bash shell


【解决方案1】:

您的服务需要一个协议。

正如您所说,“使用 curl 怎么样”?当然,你可以用rest api创建一个web服务。

一个web服务很简单,如果你只是想拥有一些简单的io,你可以阅读https://www.playframework.com/,并在30分钟内使用它(25分钟下载包,5分钟阅读文档)


另一种方法是使用“nc”作为“客户端”,一个简单的介绍页面可以在这里找到:http://man.openbsd.org/OpenBSD-current/man1/nc.1

你可以写

echo "your command" | nc localhost 6666

向服务器发送套接字请求。

但是,您应该自己定义协议。

【讨论】:

  • 正如我所说的,我只需要发送 2 或 3 个命令......像这样的框架将是矫枉过正,因为这是我唯一会使用它的东西
  • @RoiEX 哦,对了。这里有一些候选者:如果你仍然想创建一个 Web 服务,你可以使用 Jetty 或 Netty——抱歉,它们仍然是框架,但要小得多。
  • @RoiEX 你也可以使用命令“nc”自己定义协议
  • @RoiEX 关于如何使用nc,可以使用'echo "your-command" | nc localhost 6666',和服务器端,你可以使用socket监听localhost:6666,像这里:docs.oracle.com/javase/tutorial/networking/sockets/…
  • @RoiEX 完成了,我很感激有什么。可能会有所帮助
【解决方案2】:

我计划的系统是一个好的计划吗?

我不知道你的应用范围,但是如果你正在重写代码,可以考虑使用Spring Boot 这么简单的框架,可以很方便的生成一个命令行应用,可以deployed as a linux service

这样你就可以运行类似的命令

service xyz start
service xyz stop
service xyz status

【讨论】:

  • 使用 Spring 开始时是一个简单的框架,但随着您将更多代码嵌入到 XML 中,它很少会保持这种状态。
  • AFAIK 将我的应用程序部署为 Linux 服务可以在没有此框架的情况下使用自定义文件...但仍然感谢您的回答
  • @EdwinBuck 是的,这对于任何环境都是正常的,不仅仅是 spring :)
  • @RoiEx 欢迎您......是的,它是通过 init.d 脚本完成的。只是想提出 Spring Boot,以防您的应用程序将被扩展并且将来需要类似 Web 服务的东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-15
  • 2016-08-30
  • 2012-10-05
  • 2014-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多