我需要通过sshj执行shell脚本并断开连接,而不必等待脚本完成。该脚本可能需要很长时间才能完成,因此我将创建其他Java代码以定期检查脚本的结果。如何在不等待shell脚本完成的情况下断开sshj会话?
答案 0 :(得分: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();