我正在使用net.neoremind.sshxcute SSH Java API库连接到sftp服务器并执行该服务器上的shell脚本。
我的Shell脚本可以轻松地将文件从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 :(得分:1)
exec
方法调用返回的Result对象包括:
Result.rc
),Result.sysout
),Result.error_msg
)和Result.isSuccess
)。因此,如果您致力于使用sshxcute框架执行shell脚本的当前方法,那么最简单的方法是让move.sh
脚本在移动文件时提供有关任何失败的信息。这可以通过返回代码和标准输出(stdout)和/或标准错误(stderr)消息的组合来完成。然后,您的Java代码将从返回的Result对象中获取此信息。