2013-06-21 50 views
2

我需要通过sshj执行一个shell脚本,并断开连接而不必等待脚本完成。脚本可能需要很长时间才能完成,所以我将创建额外的Java代码来定期检查脚本的结果。如何在不等待shell脚本完成的情况下断开sshj会话?sshj使用nohup执行脚本

回答

1

&结束您的命令。例如:

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();