2013-06-21 52 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();