sshj使用nohup执行脚本

时间:2013-06-21 13:59:59

标签: java ssh jsch sshj

我需要通过sshj执行shell脚本并断开连接,而不必等待脚本完成。该脚本可能需要很长时间才能完成,因此我将创建其他Java代码以定期检查脚本的结果。如何在不等待shell脚本完成的情况下断开sshj会话?

1 个答案:

答案 0 :(得分:2)

使用&结束命令。例如:

nohup /usr/bin/longRunningProcess &

提交该命令后(例如,提交命令然后拨打Command.join()),您可以断开连接,longRunningProcess将在后台继续。另一件需要担心的是命令的输出。您必须将stdoutstderr重定向到其他位置,例如/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();