#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’, у которой определенно не будет проблем с разрешениями или чего-либо еще.. просто еще один способ попробовать. ..