0

所以我有一个执行 ab-initio 图的 unix 命令:

export AB_HOME=/opt/abinitio/installations/Saturn_Abinitio/ab_home;/opt/abinitio/installations/Saturn_Abinitio/ab_home/bin/air sandbox run /home/sp64647/Multifonds/mp/SecoreEventsDriver.mp

该命令在 Tectia 或 Putty 等 SSH 客户端上运行时按预期工作。

但是通过 JSch 运行时的相同命令没有按预期工作:

这是一些JSch代码:

try{
          JSch.setLogger(new MyLogger());
      JSch jsch=new JSch();  

      String host=null;

      String user=getUserid();
      host="fdcgtsabnaa01d.eur.nsroot.net";
      String config =
                "Port 22\n"+
                "\n"+
                "Host foo\n"+
                "  User "+user+"\n"+
                "  Hostname "+host+"\n"
                ;



              ConfigRepository configRepository =
                com.jcraft.jsch.OpenSSHConfig.parse(config);


              jsch.setConfigRepository(configRepository);
              Session session=jsch.getSession("foo");


      String passwd =getPassword();
      session.setPassword(passwd);
      UserInfo ui = new MyUserInfo(){

          public boolean promptYesNo(String message){

            int foo = 0;
            return foo==0;
          }
      };
      session.setUserInfo(ui);
      session.connect();

      String command="export AB_HOME=/opt/abinitio/installations/Saturn_Abinitio/ab_home;/opt/abinitio/installations/Saturn_Abinitio/ab_home/bin/air sandbox run "+mainGraphPath;

      Channel channel=session.openChannel("exec");

      ((ChannelExec)channel).setCommand(command);


      channel.setInputStream(null);


      ((ChannelExec)channel).setErrStream(System.err);

      InputStream in=channel.getInputStream();

      channel.connect();

      byte[] tmp=new byte[1024];
      while(true){
        while(in.available()>0){
          int i=in.read(tmp, 0, 1024);
          if(i<0)break;
          page_message=new String(tmp, 0, i);
          System.out.print(page_message);
        }
        if(channel.isClosed()){
          if(in.available()>0) continue; 
          System.out.println("exit-status: "+channel.getExitStatus());
          break;
        }
        try{Thread.sleep(1000);}catch(Exception ee){}
      }

      if(channel.getExitStatus()!=0){
          flag=false;
      }
      channel.disconnect();
      session.disconnect();

    }
    catch(Exception e){
      System.out.println(e);
    }

上面的命令也可以与其他参数完美配合。

预期输出:

信息:++++ 已开始 ++++ Job SecoreEventsDriver_2016-12-02-12-20-11_25100584 信息:执行主机 fdcgtsabnaa01d.eur.nsroot.net 信息:中央日志记录到 /opt/abinitio/data/Saturn_London/admin/ log/environment_operations_2016_12.log info:原始跟踪到 /opt/abinitio/data/Saturn_London/admin/Multifonds/tracking/./SecoreEventsDriver_2016-12-02-12-20-11_25100584.tracking info:输入 pset 归档到 /opt/abinitio /data/Saturn_London/admin/Multifonds/parameter/./SecoreEventsDriver_2016-12-02-12-20-11_25100584.pset 信息:未收集摘要信息:错误记录到 /opt/abinitio/data/Saturn_London/admin/Multifonds /error/./SecoreEventsDriver_2016-12-02-12-20-11_25100584.err 信息:详细记录到 /opt/abinitio/data/Saturn_London/admin/Multifonds/log/./SecoreEventsDriver_2016-12-02-12-20- 11_25100584.log 信息:++++ 完成 ++++ 工作 SecoreEventsDriver_2016-12-02-12-20-11_25100584

不正确的输出:

信息:++++ 已开始 ++++ Job SecoreEventsDriver_2016-12-02-12-30-20_40632400 信息:执行主机 fdcgtsabnaa01d.eur.nsroot.net 信息:中央日志记录到 /opt/abinitio/data/Saturn_London/admin/ log/environment_operations_2016_12.log info:原始跟踪到 /opt/abinitio/data/Saturn_London/admin/Multifonds/tracking/./SecoreEventsDriver_2016-12-02-12-30-20_40632400.tracking info:输入 pset 归档到 /opt/abinitio /data/Saturn_London/admin/Multifonds/parameter/./SecoreEventsDriver_2016-12-02-12-30-20_40632400.pset 信息:未收集摘要信息:错误记录到 /opt/abinitio/data/Saturn_London/admin/Multifonds /error/./SecoreEventsDriver_2016-12-02-12-30-20_40632400.err 信息:详细记录到 /opt/abinitio/data/Saturn_London/admin/Multifonds/log/./SecoreEventsDriver_2016-12-02-12-30- 20_40632400.log 信息:++++ 失败 ++++ 工作 SecoreEventsDriver_2016-12-02-12-30-20_40632400

具有这一特定参数的这一命令怎么可能没有通过 JSch 按预期运行,但在其他情况下运行良好?

4

0 回答 0