我需要通过 sshj 执行一个 shell 脚本并在不等待脚本完成的情况下断开连接。该脚本可能需要很长时间才能完成,因此我将创建额外的 Java 代码来定期检查脚本的结果。如何在不等待 shell 脚本完成的情况下断开 sshj 会话?
问问题
1080 次
1 回答
2
用 结束您的命令&
。例子:
nohup /usr/bin/longRunningProcess &
一旦提交了该命令(例如,提交命令然后调用Command.join()
),您可以断开连接,并将longRunningProcess
在后台继续。另一件需要担心的是命令的输出。您将不得不重定向stdout
到stderr
其他地方,例如/dev/null
. 因此,该命令将如下所示:
nohup /usr/bin/longRunningProcess > /dev/null 2>&1 &
Java 代码类似于:
SSHClient client = ...
Session session = ...
Command command = session.exec(yourCommand);
// Wait for command to be submitted
command.join();
// Do some error checking by checking command.getExitStatus()
...
// Disconnect
session.close();
client.close();
于 2014-01-09T20:59:29.690 回答