Выполнение Nginx из java-приложения

#java #nginx

#java #nginx

Вопрос:

Я пытаюсь запустить HTTP-сервер nginx из Java-приложения, используя

 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 собран из исходного кода с последней стабильной версией.

Ответ №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/"});
  

Ответ №2:

Попробуйте прочитать входной поток процесса. Что-то вроде этого …

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

Редактировать: также попробуйте вместо этого поток ошибок …
http://download.oracle.com/javase/6/docs/api/java/lang/Process.html#getErrorStream()
(вероятно, именно там вы найдете какие-либо ошибки!)

HTH

Комментарии:

1. хм — ничего из errorStream, да. Я предполагаю, что вы пытались вызвать другую команду, такую как ‘ls’, у которой определенно не будет проблем с разрешениями или чего-либо еще.. просто еще один способ попробовать. ..