从java应用程序执行Nginx

时间:2011-06-05 23:53:15

标签: java nginx

我正在尝试使用

从java应用程序启动nginx HTTP服务器
Runtime.getRuntime().exec(command);

命令变量内容为:

/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输出,它不输出任何东西。

旁边当我从任何终端执行命令时它工作正常。 注意:我使用的是ubuntu linux,nginx是从源码构建的最新稳定版本。

2 个答案:

答案 0 :(得分:1)

因为

Runtime.getRuntime().exec(command);

相当于

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

所以它不起作用,因为参数数组为null,exetable文件为“/ 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/"});

答案 1 :(得分: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