簡體   English   中英

使用Java在Unix服務器上執行FNDLOAD命令

[英]execute FNDLOAD command on unix server using Java

我在Windows中有一個Java UI。 我想從該UI 連接到Unix服務器並運行FNDLOAD命令。

我在這里找到了一個代碼。 但是通過這個我就能夠運行普通的unix命令(例如ls,cd等)並實現輸出。 但是,當我嘗試運行FNDLOAD命令時,它給了我以下錯誤

bash:FNDLOAD:找不到命令

FNDLOAD utility已安裝在服務器上,而且當我連接到putty並運行命令時,我也可以獲得期望的結果。

有什么辦法可以從Java運行命令?

編輯1:我正在使用jsch附加庫進行連接。 這是我正在使用的代碼。

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();
        }

    }

}

編輯2不僅FNDLOAD命令,我也無法獲取系統變量。 就像我給命令$JAVA_TOP ,代碼不返回任何內容。 cd $JAVA_TOP也不起作用。 :(

有人請幫忙..

終於成功了。 這是解決方案

FNDLOAD是OS命令行可執行文件。 為了運行它,我們必須在調用FNDLOAD之前確保在外殼中正確設置了我們的環境。

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

有一個名為MigrationLogiK(migrationlogik.com)的應用程序,該應用程序專門用於解決自定義EBS對象的遷移。 它具有在服務器上運行的客戶端和代理,並允許執行FNDLOAD並將.ldt文件下載回客戶端工作站。 這樣,您無需對任何值進行硬編碼。 非常直觀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM