2011-06-05 23 views
0

我試圖使用從Java應用

Runtime.getRuntime().exec(command); 

命令變量內容開始從java應用nginx的HTTP服務器執行的Nginx是:

/media/data/websites/php-desktop/bin/nginx/nginx/nginx -c "/tmp/conf/nginx.conf" -p "/media/data/websites/php-desktop/bin/nginx/" 

的命令應該從指定的路徑德nginx的開始,後配置文件-c和前綴值後-p

問題是java不啓動nginx它只是默默地落下,我試圖打印procccess輸出p它不輸出任何東西。

旁邊,當我從任何終端執行命令,它工作正常。 注意:我使用ubuntu linux,nginx從最新穩定版本的源代碼構建而成。

回答

1

因爲

Runtime.getRuntime().exec(command); 

相當於

Runtime.getRuntime().exec(command, null, null); 

所以它不會工作,因爲參數數組爲空和可擴展文件爲「/ media/data/websites/php-desktop/bin/nginx/nginx/nginx -c/tmp/conf/nginx。 conf -p ....「。

請嘗試之一

Runtime.getRuntime().exec(new String[] { 
    "/bin/sh" 
    ,"-c" 
    ,"/media/data/websites/php-desktop/bin/nginx/nginx/nginx -c \"/tmp/conf/nginx.conf\" -p \"/media/data/websites/php-desktop/bin/nginx/\"}); 

或者

Runtime.getRuntime().exec(new String[] { 
"/media/data/websites/php-desktop/bin/nginx/nginx/nginx", 
"-c", 
"/tmp/conf/nginx.conf", 
"-p", 
"/media/data/websites/php-desktop/bin/nginx/"}); 
0

嘗試讀取進程的inputStream。事情是這樣的......

 Process p = Runtime.getRuntime().exec(command); 
     BufferedReader in = new BufferedReader( 
          new InputStreamReader(p.getInputStream())); 
     String line = null; 
     while ((line = in.readLine()) != null) { 
      System.out.println(line); 
     } 

編輯:也嘗試errorStream,而不是... http://download.oracle.com/javase/6/docs/api/java/lang/Process.html#getErrorStream%28%29 (這可能是在那裏你會發現任何錯誤!)

HTH

+0

輸出什麼。 – 2011-06-06 00:02:04

+0

嗯 - 從errorStream什麼都沒有,呃。我想你已經嘗試調用另一個命令,比如'ls',它絕對不會有權限問題或任何其他問題..只是另一個嘗試的途徑。 .. – laher 2011-06-06 06:38:47