Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.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配置Linux机箱的选项_Java_Linux - Fatal编程技术网

从Java配置Linux机箱的选项

从Java配置Linux机箱的选项,java,linux,Java,Linux,我正试图制作一个java应用程序,从web界面管理Linux服务器。 通过调用bashshell来执行每个任务不是一个好主意吗? 除了使用C、Perl或其他语言之外,还有其他选择吗?您当然可以这样做。理想情况下,您应该打开一个端口并接受精心编制的特定操作,这些操作通过套接字库仅执行预期的操作(接口服务器)。使用bash进行实际工作并不一定是个坏主意。如果您能给我们提供更多关于web界面到底在发生什么变化的信息,那会有所帮助 特别是Java,它没有提供太多的系统特定控件,因为它被设计成一种跨平台的

我正试图制作一个java应用程序,从web界面管理Linux服务器。 通过调用bashshell来执行每个任务不是一个好主意吗?
除了使用C、Perl或其他语言之外,还有其他选择吗?

您当然可以这样做。理想情况下,您应该打开一个端口并接受精心编制的特定操作,这些操作通过套接字库仅执行预期的操作(接口服务器)。

使用bash进行实际工作并不一定是个坏主意。如果您能给我们提供更多关于web界面到底在发生什么变化的信息,那会有所帮助


特别是Java,它没有提供太多的系统特定控件,因为它被设计成一种跨平台的语言,因此使用特定的平台工具将违背它的目的。

我认为缺点是为命令调用Bash脚本的方法都与错误处理和返回值有关。在出现故障(甚至成功)的情况下,每个Bash脚本都需要向Java应用程序返回合理、有用的信息。您可能需要一个通用接口,这样每个Bash脚本,无论其功能如何,都会返回相同的类型,以便Java能够轻松地解释它


因此,从这个意义上讲,对Java程序进行更改可以降低来回处理信息的复杂性。另一方面,如果Bash对您来说更容易,您可能会发现它更快速、更灵活。

打开一个Bash shell并发送命令(以及正确解析结果)应该不错。它确实将您的程序绑定到一个操作系统甚至一个shell,但这正是您试图做的事情的本质


我不会为每个命令打开一个shell,并在每个结果之后关闭它。在我看来,当许多命令连续执行时,这会导致不必要的抖动。

安全问题突然向我袭来。如果你有一个像“type command”这样的表单,那么聪明的人可以利用一些东西。例如,“配置网络”可以,但可以键入“配置网络;安装rootkit”,因为分号允许链接命令

总而言之,这不是紧密集成。如果这是一个个人项目,就去做吧。将过程脚本转换为java程序是一个很好的学习项目。如果这是一个认真的努力,以重新创建许多不同的webapp管理工具存在,我郑重建议跳过这一点。我所看到的那些我讨厌的事。以前有一个基于php的linux管理工具看起来不错,但我发现它们很容易学习,很容易被淘汰,因为网络和社区充满了命令行知识


如果您试图自动化大型部署,请查看基于ruby的puppet。它看起来真的很棒。

我有一个套接字服务器,我执行不同的操作(例如通过调用shell使用ifconfig),我计划在JSF应用程序中集成一个客户端。因为我没有ant经验,所以我打算把它作为我的毕业设计,但我不太确定从java调用bash来配置linux机器是否是一个好的解决方案。

很多响应将取决于您为什么这样做,以及为什么其他更明显的解决方案不可能。了解为什么您会选择自己的而不是安装,或者为什么您会选择使用WebUI而不是VNC来控制这个框是很好的。对后者(例如防火墙问题)有一些明显的反应,但对前者没有立即明显的原因。在不了解更多需求的情况下,回答有关实现细节的问题(如bash脚本与perl或C)是毫无意义的

  • Java确实有一些Linux配置类(至少OpenJDK有)。检查OperatingSystemMXBean或类似的东西

  • 您最好用自己喜欢的语言编写自己的服务器配置实用程序,对其进行清理,使其安全,然后从java应用程序中通过bash调用它


  • 这里有两个问题:

  • 您是应该尝试用Java进行配置工作,还是应该将其外部化
  • 假设您已经将其外部化,您应该使用bash脚本
  • 在这种情况下,问题1)的答案取决于具体情况。这种事情很难在纯Java中实现。这就留下了两种选择;使用流程将任务外部化,或者尝试通过JNI或JPA在本机代码库中执行任务。后一种方法很复杂,如果出错,会导致JVM崩溃,因此我将排除这种可能性

    另一方面,如果您可以找到一个好的标准或第三方javaapi来满足您的需要(而不让flakeyjni等感染您的JVM),那么您应该使用它

    2)的答案是bash脚本将与任何其他脚本语言一样工作。我认为使用脚本会给你更多的灵活性。例如,如果您需要做一些事情来补偿不同风格的Linux、UNIX甚至Windows(!)的差异,您可以将其放入外部化脚本中。(必然的结果是脚本需要是可配置的,所以不要将它们嵌入到源代码中!)


    另一种选择可能是直接运行命令(例如,
    ifconfig
    ),使用完全限定的命令名并以字符串数组的形式提供参数,等等。但是除非你的应用程序每分钟运行100次外部命令,否则它可能不值得(Java)编码工作和灵活性/可配置性的损失。

    仅仅因为他正在编写一个针对特定操作系统的应用程序,并不意味着他需要使用一种可以编译为本机代码的语言。