リモートJava Webアプリケーションを使用してWLSTで再起動サーバーコマンドを実行しようとしています。JSchでWLSTコマンドを呼び出す
これは私が実行しようとしているものです:
StringBuilder sb = new StringBuilder();
sb.append("/u01/app/oracle/jdk1.8.0_65/bin/./java -cp /u01/app/oracle/product/Oracle_Home/wlserver/server/lib/weblogic.jar weblogic.WLST");
sb.append(";connect(\'weblogic\',\'" + consolePass + "\',\'" + fullAddress + "\')");
sb.append(";domainRuntime()");
sb.append(";cd(\'/ServerLifeCycleRuntimes/" + serverName + "\')");
sb.append(";cmo.shutdown())");
sb.append(";start(" + serverName + ",'Server')");
String command = sb.toString();
JSch jsch = new JSch();
Session session = jsch.getSession(user, host, port);
session.setUserInfo(new OracleUserInfo(pass));
session.connect();
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;
System.out.print(new String(tmp, 0, i));
}
if (channel.isClosed()) {
if (in.available() > 0)
continue;
System.out.println("exit-status: " + channel.getExitStatus());
break;
}
try {
Thread.sleep(1000);
} catch (Exception ee) {
}
}
channel.disconnect();
session.disconnect();
私が使用しています ';'私は複数のコマンドを実行する必要があると思っていたので、コマンドを分けるために。
残念ながら、それはライン2
のbash上で構文エラーを与える:-c:行0:予期しないトークン
'weblogic','password','t3://host:7001''
/u01/app/oracle/jdk1.8.0_65/bin/の近くに構文エラー。/java -cp /u01/app/oracle/product/Oracle_Home/wlserver/server/lib/weblogic.jar weblogic.WLST; connect( 'weblogic'、 'password'、 't3:// host:7001') '
bash: -c: line 0:
最初の行の後に\n
を追加しようとしましたが、その結果、最初の行が実行されたので(WLSTに入ったので)、残りのコマンドはありませんでした。
StringBuilder sb = new StringBuilder();
sb.append("/u01/app/oracle/jdk1.8.0_65/bin/./java -cp /u01/app/oracle/product/Oracle_Home/wlserver/server/lib/weblogic.jar weblogic.WLST\n");
sb.append(";connect(\'weblogic\',\'" + consolePass + "\',\'" + fullAddress + "\')\n");
sb.append(";domainRuntime()\n");
sb.append(";cd(\'/ServerLifeCycleRuntimes/" + serverName + "\')\n");
sb.append(";cmo.shutdown())\n");
String command = sb.toString();
結果:
の初期化WebLogic Scripting Tool(WLST)を使用...使用可能なコマンドのヘルプ
WLSのための
ようこそ
WebLogic Server管理スクリプトシェルの種類のヘルプ():/オフライン>
私は手動でコマンドをテストしていました。この問題は、別のシェルインターフェイスを開くので、WLSTインターフェイスを使用するJSchのようです。
どのようにJSSTでWLSTコマンドを実行できるのですか?
PS1:同じアプリケーションにデプロイする機能があるため、JSchコードが動作することがわかりました。基本的には、jscpを実行してwarをアップロードし、次にsshを実行してweblogic.Deployer -deployコマンドを実行します。
PS2:これを行うには、.pyスクリプトがありますが、今のところ実行されるサーバー上にある必要があります。一時フォルダにjscpを実行し、スクリプトを実行してから削除することを考えています。しかし、JSSTを使ってWLSTで複数のコマンドを実行する方法を知りたいのは興味深いです。
ありがとうございます。 (おかげでマーティンを)作業
UPDATE
コード
Channel channel = session.openChannel("exec");
((ChannelExec) channel).setCommand(command);
InputStream in = channel.getInputStream();
OutputStream out = channel.getOutputStream();
((ChannelExec) channel).setErrStream(System.err);
channel.connect();
for (String wlstCommand : wlstCommands) {
out.write((wlstCommand).getBytes());
}
out.flush();
ありがとうございます!出来た!はい、それらはWLSTコマンドです! – fsakiyama