从Java配置Linux机箱的选项

时间:2009-08-28 21:18:54

标签: java linux

我正在尝试创建一个Java应用程序来从Web界面管理Linux服务器。 通过调用bash shell执行每个任务是个坏主意? 除了使用C,Perl或其他语言之外,还有其他选择吗?

9 个答案:

答案 0 :(得分:2)

使用bash来完成实际工作并不一定是个坏主意。如果你让我们更多地了解网络界面究竟发生了什么变化,那将会有所帮助。

特别是Java没有提供太多特定于系统的控件,因为它被设计为跨平台语言,因此将特定平台工具放入其中是违背它的目的。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

打开单个bash shell并发送命令(并正确解析结果)应该不错。它确实将您的程序绑定到单个操作系统甚至单个shell,但这是您尝试执行的操作的本质。

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

答案 4 :(得分:0)

安全问题突然袭来。如果你有一个像“类型命令”这样的形式,那么聪明的人可以利用一些东西。例如“configure network”很好,但是“configure network; install rootkit”可以输入,因为分号允许命令被链接。

总而言之,这不是紧密集成。如果这是个人项目,那就去吧。将程序脚本转换为java程序是一个很好的学习项目。如果这是重新创建许多各种webapp管理工具的认真努力,我会认真地建议跳过这个。我看到的VPanel / CPanel我讨厌的东西。曾经有一个基于PHP的Linux管理员的东西看起来不错,但我发现它们很容易学习,很容易长大,因为网络和社区充满了命令行知识。

如果您尝试自动化大型部署,请查看基于ruby的木偶。它看起来很整洁。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

  1. Java确实有一些Linux配置类(至少OpenJDK是这样)。检查OperatingSystemMXBean或类似的内容。

  2. 您不得不用您喜欢的语言编写自己的服务器配置实用程序,清理它,使其安全,然后通过您的Java应用程序通过bash调用它。

答案 7 :(得分:0)

这里有两个问题:

  1. 您是否应该尝试使用Java进行配置工作,还是应该将其外部化?
  2. 假设您已将其外化,是否应使用bash脚本。
  3. 在这种情况下,问题1)的答案取决于。这种事情在纯Java中很难实现。这留下了两个选择;使用Process外部化任务,或尝试通过JNI或JPA在本机代码库中执行此操作。后一种方法很复杂,如果你犯了错误就会给你JVM崩溃,所以我会把它排除在外。

    另一方面,如果你能找到一个好的标准或第三方Java API来完成你需要的东西(没有使用flakey JNI等攻击你的JVM),你应该使用它。

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

    另一种替代方法可能是直接运行命令(例如ifconfig),使用完全限定的命令名称并将参数作为字符串数组等提供。但除非您的应用程序要运行外部命令每分钟100次,可能不值得(Java)编码工作和灵活性/可配置性的损失。

答案 8 :(得分:-1)

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