所以我有一个执行 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 按预期运行,但在其他情况下运行良好?