J'ai besoin d'exécuter un script sur une machine distante pour cela J'utilise Jsch Je ne peux pas stocker le script dans une machine distante. ci-dessous est le scriptL'exécution d'iqisql à l'aide de JSch échoue avec "Une erreur s'est produite lors de la tentative d'allocation de structures liées à la localisation"
#!/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!
si je lance le script dans la machine Linux, je suis en mesure d'obtenir le nécessaire outut
#: /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)
Mais quand je suis en train d'exécuter le script en utilisant sous le code java -
package 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();
}
}
}
mais quand je lance ce que je reçois l'erreur ci-dessous comme outut- Une erreur est survenue lors d'une tentative d'affecter les structures liées à la localisation
est quelque chose à voir avec le nom de la locale « en_US.UTF-8 »? comment mettre en jsch
NB: Je ne peux pas utiliser les pilotes sybase dans le cadre en raison de l'exigence DonT permettre
Comment le faire en utilisant jsch – Avishek
Chaîne commande = "unset LANG;/eniq/sybase_iq/OCS-15_0/bin/iqisql -Un nom d'utilisateur -Ppassword -Sdb -b -n << EOF!" + "\ n" + "SELECT SUM (Employee.Names) FROM DC.EMPLOYEES O JOIN JOININGDATE = \" 8 août 2016 11: 30: 00.000000PM \ "" + "\ n" + "go" + "\ n" + "exit" + "\ n" + "EOF!"; J'ai essayé de modifier de cette façon mais pas d'aide même erreur – Avishek