Ssh

使用 Jsch 在 Windows 上執行 FNDLOAD 命令

  • July 14, 2016

通過 ssh 連接到我的 unix 伺服器後,我正在嘗試FNDLOAD使用 Jsch 執行命令。但是命令給了我以下錯誤

bash:FNDLOAD:找不到命令

此外,如果我嘗試讀取任何環境變數,例如,等等JAVA_TOPFND_TOP它不會給出任何輸出。但是使用此程式碼,讀取 .sh 文件等所有其他命令都可以正常工作。程式碼如圖所示:

import java.io.InputStream;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import java.util.Properties;

public class ShellExecuter {

   /**
    * @param args
    */
   public static void main(String[] args) {
       String host = "10.111.111.11";
       String user = "username";
       String password = "password";
       String FND_TOP = "/u01/oracle/fs1/appl/fnd/12.0.0";
       String command = "FNDLOAD user/pass O Y DOWNLOAD " + FND_TOP + "/patch/115/import/abc.lct "
               + "/home/applvis/JAVA/abc.ldt PROGRAM APPLICATION_SHORT_NAME=XX "
               + "CONCURRENT_PROGRAM_NAME=UPLOAD_TOOL";
       try {

           Properties config = new Properties();
           config.put("StrictHostKeyChecking", "no");
           JSch jsch = new JSch();
           Session session = jsch.getSession(user, host, 22);
           session.setPassword(password);
           session.setConfig(config);
           session.connect();
           System.out.println("Connected");

           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()) {
                   System.out.println("exit-status: " + channel.getExitStatus());
                   break;
               }
               try {
                   Thread.sleep(1000);
               } catch (Exception ee) {
               }
           }
           channel.disconnect();
           session.disconnect();
           System.out.println("DONE");
       } catch (Exception e) {
           e.printStackTrace();
       }

   }

}

誰能幫我閱讀環境變數和執行FNDLOAD命令。我不明白我在做什麼錯。

PS:FNDLOAD utility在伺服器上正確安裝。當我從 putty 執行相同的命令時,我能夠達到預期的結果。

有沒有人有任何建議或任何東西可以幫助我解決這個問題。我很震驚。我嘗試了很多方法,但沒有任何效果。任何幫助表示讚賞。

終於讓它工作了。這是解決方案

FNDLOAD 是一個作業系統命令行執行檔。為了執行它,我們必須確保在 shell 中正確設置了我們的環境,然後再呼叫FNDLOAD.

((ChannelExec) channel).setCommand("cd path/to/env/file; . ./envFileName.env;"+ command);

引用自:https://serverfault.com/questions/786444