2013-07-08 27 views
0

我希望能夠在linux終端中執行一個jar文件,它將運行一系列命令來yum在服務器上安裝多個程序。我們的目標是自動化一些安裝過程,因爲我們進行了很多安裝以進行測試。我有以下代碼:如何在jar文件的linux命令行中進行yum安裝?

public class test 
{ 
    public static void main(String[] args) 
    { 
     Runtime rt = Runtime.getRuntime(); 
     String cmd; 

     cmd = "/bin/sh -c yum install -y rpm-build"; 
     rt.exec(cmd); 
    } 
} 

當我運行它時,沒有任何反應。如果我只是運行「yum install -y rpm-build」,它可以正常工作,但如果我運行jar來執行它,則不會。我究竟做錯了什麼?從下面的代碼/評論

錯誤流:

[email protected] labStats]# java test 
Loaded plugins: fastestmirror 
Usage: yum [options] COMMAND 

List of Commands: 

check   Check for problems in the rpmdb 
check-update Check for available package updates 
clean   Remove cached data 
deplist  List a package's dependencies 
distribution-synchronization Synchronize installed packages to the latest available versions 
downgrade  downgrade a package 
erase   Remove a package or packages from your system 
groupinfo  Display details about a package group 
groupinstall Install the packages in a group on your system 
grouplist  List available package groups 
groupremove Remove the packages in a group from your system 
help   Display a helpful usage message 
history  Display, or use, the transaction history 
info   Display details about a package or group of packages 
install  Install a package or packages on your system 
list   List a package or groups of packages 
load-transaction load a saved transaction from filename 
makecache  Generate the metadata cache 
provides  Find what package provides the given value 
reinstall  reinstall a package 
repolist  Display the configured software repositories 
resolvedep  Determine which package provides the given dependency 
search   Search package details for the given string 
shell   Run an interactive yum shell 
update   Update a package or packages on your system 
upgrade  Update packages taking obsoletes into account 
version  Display a version for the machine and/or available repos. 


Options: 
    -h, --help   show this help message and exit 
    -t, --tolerant  be tolerant of errors 
    -C, --cacheonly  run entirely from system cache, don't update cache 
    -c [config file], --config=[config file] 
         config file location 
    -R [minutes], --randomwait=[minutes] 
         maximum command wait time 
    -d [debug level], --debuglevel=[debug level] 
         debugging output level 
    --showduplicates  show duplicates, in repos, in list/search commands 
    -e [error level], --errorlevel=[error level] 
         error output level 
    --rpmverbosity=[debug level name] 
         debugging output level for rpm 
    -q, --quiet   quiet operation 
    -v, --verbose   verbose operation 
    -y, --assumeyes  answer yes for all questions 
    --version    show Yum version and exit 
    --installroot=[path] set install root 
    --enablerepo=[repo] enable one or more repositories (wildcards allowed) 
    --disablerepo=[repo] disable one or more repositories (wildcards allowed) 
    -x [package], --exclude=[package] 
         exclude package(s) by name or glob 
    --disableexcludes=[repo] 
         disable exclude from main, for a repo or for 
         everything 
    --obsoletes   enable obsoletes processing during updates 
    --noplugins   disable Yum plugins 
    --nogpgcheck   disable gpg signature checking 
    --disableplugin=[plugin] 
         disable plugins by name 
    --enableplugin=[plugin] 
         enable plugins by name 
    --skip-broken   skip packages with depsolving problems 
    --color=COLOR   control whether color is used 
    --releasever=RELEASEVER 
         set value of $releasever in yum config and repo files 
    --setopt=SETOPTS  set arbitrary config and repo options 

    Plugin Options: 
------ Std Err ------- 
Failed 

終於得到它的工作多虧JtheRocker。這是工作代碼,以防別人遇到同樣的問題。

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 



public class test 
{ 
    public static void main(String[] args) throws IOException, InterruptedException 
    { 
     Runtime rt = Runtime.getRuntime(); 
     String cmd[] = new String[] {"yum", "install", "-y", "rpm-build"}; 
     Process ps = rt.exec(cmd); 

     BufferedReader readerStd = new BufferedReader(new InputStreamReader(ps.getInputStream())); 

     BufferedReader readerErr = new BufferedReader(new InputStreamReader(ps.getInputStream())); 

     String line = null; 
     while ((line = readerStd.readLine()) != null) { 
      System.out.println(line); 
     } 
     System.out.println("------ Std Err -------"); 
     while ((line = readerErr.readLine()) != null) { 
      System.out.println(line); 
     } 

     if (ps.waitFor()==0) { 
      System.out.println("success"); 
     } else { 
      System.out.println("Failed"); 
     } 
    } 
} 
+0

你得到什麼錯誤? – Pradheep

+0

其中一個可能的原因是它無法找到rpm-build.Pass rpm-build的絕對路徑到yum – Pradheep

+0

沒有錯誤,它只是沒有做任何事情。它適用於其他命令,例如,如果我用「mkdir/mnt/test」替換了「yum install -y rpm-build」目錄,但是當我運行上面的代碼時,程序未安裝。 – cHam

回答

1

試試這個:

public class test 
{ 
    public static void main(String[] args) 
    { 
     Runtime rt = Runtime.getRuntime(); 
     String cmd[] = new String[] {"yum", "-y", "install", "rpm-build"}; 
     Process ps = rt.exec(cmd); 

     BufferedReader readerStd = new BufferedReader(new InputStreamReader(ps.getInputStream())); 

     BufferedReader readerErr = new BufferedReader(new InputStreamReader(ps.getInputStream())); 

     String line = null; 
     while ((line = readerStd.readLine()) != null) { 
      System.out.println(line); 
     } 
     System.out.println("------ Std Err -------"); 
     while ((line = readerErr.readLine()) != null) { 
      System.out.println(line); 
     } 

     if (ps.waitFor()==0) { 
      System.out.println("success"); 
     } else { 
      System.out.println("Failed"); 
     } 
    } 
} 
+0

輸出「失敗」 – cHam

+0

也嘗試用「sudo」添加沒有運氣。我也以root用戶身份登錄。 – cHam

+0

嘿,我也添加了錯誤流。現在嘗試新的代碼。 –