2014-03-04 29 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对象中获取此信息。