我正在尝试运行shell脚本 (/sasdata/sasconfig/Lev1/Applications/SASEnterpriseGRCAdminTools/6.1/dbscripts/addxlsdata.sh -t /sasdata/Data/Loaders/IFT_tst_loader2.xls) 在远程服务器上用java,使用jcraft,但在回答我有退出状态127.我试图用我的方法运行简单的命令“日期” - 一切都很好。然后我试着通过在终端输入命令来运行这个脚本,一切都很好。此外,我尝试使用addxlsdata.sh执行“cd”到路径并运行 ./addxlsdata.sh -t /sasdata/Data/Loaders/IFT_tst_loader2.xls 再次有127退出状态。 它可能是什么问题?
这是我的方法:
public static void executeShell(String shellScriptCommand, String userName, String password, String server) {
List<String> result = new ArrayList<String>();
try {
LOG.info("Creating session, user: " + userName);
JSch jSch = new JSch();
Session session = jSch.getSession(userName, server, sshPort);
session.setConfig("StrictHostKeyChecking", "no");
session.setPassword(password);
session.connect();
LOG.info("Opening exec channel");
ChannelExec channelExec = (ChannelExec) session.openChannel("exec");
LOG.info("Creating InputStream");
InputStream in = channelExec.getInputStream();
channelExec.setCommand("sh " + shellScriptCommand);
LOG.info("Executing the shell script: " + shellScriptCommand);
channelExec.connect();
LOG.info("Reading the output from the input stream");
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
CommonFunctions.freeze(3);
while (reader.ready()) {
String line = reader.readLine();
result.add(line);
}
reader.close();
LOG.info("OUTPUT is " + result);
LOG.info("Getting exit status");
int exitStatus = channelExec.getExitStatus();
LOG.info("Exit status is [" + exitStatus + "]");
channelExec.disconnect();
session.disconnect();
} catch (JSchException | IOException e) {
LOG.error(Arrays.toString(e.getStackTrace()));
throw new AutotestError("Ошибка при выпонении shell скрипта", e);
}
}
我发现了一件事。这个* .sh文件在“./runjava.sh”中有另一个脚本。也许这就是问题
似乎连接到错误的服务器是我的错。尽管我在java和winscp中使用相同的地址,但当我在目录中使用ls和java和终端中的脚本时,我有不同的结果
我认为我已经找到了什么问题。当我在java中执行“cd /”然后“pwd”时,输出为“/ home / username”。我无法从主目录退出到java中的root。在终端中,我可以使用相同的用户答案 0 :(得分:0)
您的java应用程序无权执行该脚本。将帐户(运行java应用程序)添加到对脚本./addxlsdata.sh
具有所有权的组中。还提供必要的执行权限。
首先转到目录并执行ls -ltr
并向Unix管理员提供详细信息,并提供运行java应用程序的用户ID详细信息,以将该用户添加到正确的组中。一旦你做错了,它就会奏效。
答案 1 :(得分:0)
这是我可怕的错。我用不同的命令多次调用我的方法。我正在运行executeShell“cd /”然后执行executeShell“pwd”。当然第二次是新会议。