为此我需要在远程机器上运行脚本我正在使用 Jsch 我无法将脚本存储在远程机器中。下面是脚本
#!/bin/bash
/eniq/sybase_iq/OCS-15_0/bin/iqisql -Uce -Pce -Sendb -b -n <<EOF!
SELECT SUM(COUNTERS) FROM ADAPTER WHERE STARTTIME = "Aug 8 2016 11:30:00.000000PM"
go
exit
EOF!
如果我在 Linux 机器上运行脚本,我可以获得所需的输出
#: /eniq/sybase_iq/OCS-15_0/bin/iqisql -Uce -Pce -Sendb -b -n <<EOF!
> SELECT SUM(COUNTERS) FROM ADAPTER WHERE STARTTIME = "Aug 8 2016 11:30:00.000000PM"
> go
> exit
> EOF!
168002
(1 row affected)
但是当我尝试使用下面的java代码运行脚本时 -
包 org.rhq.plugin.eniq;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Properties;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
public class JSchTest {
private final Log log = LogFactory.getLog(JSchTest.class);
public void executeCommand() {
try {
String command = "/eniq/sybase_iq/OCS-15_0/bin/iqisql -Uce -Pce -Sendb -b -n <<EOF!" + "\n"
+ "SELECT SUM(COUNTERS) FROM ADAPTER WHERE STARTTIME = \"Aug 8 2016 11:30:00.000000PM\""
+ "\n" +
"go" + "\n" + "exit" + "\n" + "EOF!";
String host = "107.250.237.13";
String user = "dcuser";
String password = "dcuser";
JSch jsch = new JSch();
Session session = jsch.getSession(user, host, 22);
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
;
session.setPassword(password);
session.connect();
Channel channel = session.openChannel("exec");
((ChannelExec) channel).setCommand(command);
channel.setInputStream(null);
((ChannelExec) channel).setErrStream(System.err);
InputStream input = channel.getInputStream();
channel.connect();
log.error("Channel Connected to machine " + host + " server with command: " + command);
try {
InputStreamReader inputReader = new InputStreamReader(input);
BufferedReader bufferedReader = new BufferedReader(inputReader);
String line = null;
while ((line = bufferedReader.readLine()) != null) {
log.error("Eniq DB Output line is " + line);
}
bufferedReader.close();
inputReader.close();
} catch (IOException ex) {
ex.printStackTrace();
}
channel.disconnect();
session.disconnect();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
但是当我运行它时,我得到以下错误作为输出-尝试分配与本地化相关的结构时发生错误
与语言环境名称“en_US.UTF-8”有关吗?如何在jsch中设置
注意:由于要求不允许,我不能在连接中使用 sybase 驱动程序