2014-03-04 31 views
0

我正在使用net.neoremind.sshxcute SSH Java API庫連接到sftp服務器並執行該服務器上存在的shell腳本。從shell命令獲得對Java代碼的響應

我的外殼腳本做一個簡單的工作,將文件從該SFTP位置移動到某個其他機器上的HDFS位置。

目前,還沒有辦法報告如果任何文件都不會移動,由於某種原因,如連接失敗,非法名字的文件,空文件等

我不知道,我怎麼能證明集每個失敗文件的信息從shell命令轉移回Java代碼?

這是我的示例代碼:

// e.g sftpScriptPath => /abc/xyz 
// sftpScriptCommand => sudo ./move.sh 
// arguments => set of arguments to shell script. 
task = new ExecShellScript(sftpScriptPath, sftpScriptCommand, arguments); 
result = m_SshExec.exec(task); 
if(result.isSuccess && result.rc == 0) 
{ 
    isSuccessful = true; 
    s_logger.info("Shell script executed successfully"); 
    s_logger.info("Return code : " + result.rc); 
    s_logger.info("Sysout : " + result.sysout); 
} 
else 
{ 
    isSuccessful = false; 
    s_logger.info("Shell script execution failed"); 
    s_logger.info("Return code : " + result.rc); 
    s_logger.info("Sysout : " + result.sysout); 
} 
+0

從shell腳本中只能得到表示成功或失敗的返回值,但是您可以安排腳本將每次失敗的原因寫入日誌文件,當腳本報告失敗時,您的Java代碼可以從該日誌文件中學習這些原因。 –

回答

1

exec方法調用返回的Result對象包括:

  • 退出狀態或返回碼(Result.rc),
  • 標準輸出(stdout )(Result.sysout),
  • 標準錯誤(stderr)(Result.error_msg),a nd
  • 表示成功,based on return code and outputResult.isSuccess)。

所以,如果你正在致力於用sshxcute框架執行shell腳本的當前方法,那麼最簡單的方法是將有move.sh腳本提供關於任何失效信息,而移動文件。這可以通過返回代碼和標準輸出(stdout)和/或標準錯誤(stderr)消息的組合來完成。然後,您的Java代碼將從返回的Result對象中獲取此信息。