【问题标题】:How to create a file / directory in remote machine using Java11如何使用 Java11 在远程机器中创建文件/目录
【发布时间】:2019-12-05 11:25:20
【问题描述】:

我想知道如何使用 Java11 在远程机器上创建文件/目录?

我确实尝试过使用:

process = Runtime.getRuntime()
         .exec("ssh root@" + hostname + " 'mkdir -p "+mdbDir+"'")
         .wait() or waitFor();

但即使我使用 wait()

,我也会遇到异常
java.lang.IllegalThreadStateException: process has not exited

请告诉我可以做什么。

【问题讨论】:

  • 您可能必须阅读命令的输出才能了解发生了什么。
  • @antoniossss 如果你知道,你可以帮我阅读。
  • 请注意,那里也有 Java SSH 实现。我从不喜欢执行外部应用程序。
  • waitwaitFor 是完全不同的方法,目的完全不同。你不应该把它们混在一起。而且由于在没有同步的情况下调用wait 时您没有注意到IllegalMonitorStateException,因此您的代码中必须有某种“捕获所有并忽略”结构。另一件你永远不应该做的事情。
  • @Holger 谢谢你,我不能同时使用 wait 和 waitFor 。

标签: java nio java-11 openjdk-11


【解决方案1】:

您应该只调用Process.waitFor() 而没有Process.wait()Object.wait 是关于同步的。它与流程管理无关。

【讨论】:

    【解决方案2】:

    这里有一个很好的例子,说明如何使用来自 sshj 的 SSHClient,更具体地用于您想要执行的任务:

    Send ssh command from Java code

    此外,您可能需要与目标服务器建立受信任的连接。检查来自您系统的 SSH 连接是否需要密码,如果您的系统和服务器具有受信任的连接,则它不会要求输入密码。

    如果您仍然想在没有库的情况下使用您的方法,我猜问题是执行正在等待一些输入,例如将主机添加到 knowhosts 或密码,这就是进程不退出的原因。

    【讨论】:

      猜你喜欢
      • 2011-03-09
      • 2015-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多