jcraft execute shell命令返回退出状态127

时间:2018-04-10 09:10:25

标签: shell ssh server

我正在尝试运行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。在终端中,我可以使用相同的用户

2 个答案:

答案 0 :(得分:0)

您的java应用程序无权执行该脚本。将帐户(运行java应用程序)添加到对脚本./addxlsdata.sh具有所有权的组中。还提供必要的执行权限。

首先转到目录并执行ls -ltr并向Unix管理员提供详细信息,并提供运行java应用程序的用户ID详细信息,以将该用户添加到正确的组中。一旦你做错了,它就会奏效。

答案 1 :(得分:0)

这是我可怕的错。我用不同的命令多次调用我的方法。我正在运行executeShell“cd /”然后执行executeShell“pwd”。当然第二次是新会议。