从Java配置Linux机箱的选项
我正试图制作一个java应用程序,从web界面管理Linux服务器。 通过调用bashshell来执行每个任务不是一个好主意吗?从Java配置Linux机箱的选项,java,linux,Java,Linux,我正试图制作一个java应用程序,从web界面管理Linux服务器。 通过调用bashshell来执行每个任务不是一个好主意吗? 除了使用C、Perl或其他语言之外,还有其他选择吗?您当然可以这样做。理想情况下,您应该打开一个端口并接受精心编制的特定操作,这些操作通过套接字库仅执行预期的操作(接口服务器)。使用bash进行实际工作并不一定是个坏主意。如果您能给我们提供更多关于web界面到底在发生什么变化的信息,那会有所帮助 特别是Java,它没有提供太多的系统特定控件,因为它被设计成一种跨平台的
除了使用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)是毫无意义的
这里有两个问题:
另一种选择可能是直接运行命令(例如,
ifconfig
),使用完全限定的命令名并以字符串数组的形式提供参数,等等。但是除非你的应用程序每分钟运行100次外部命令,否则它可能不值得(Java)编码工作和灵活性/可配置性的损失。仅仅因为他正在编写一个针对特定操作系统的应用程序,并不意味着他需要使用一种可以编译为本机代码的语言。