Подтвердить что ты не робот

Java 1.6 Сбой при вызове фоновой задачей Symfony

У меня есть задача Symfony, которая генерирует некоторые вызовы exec exec в jar, а затем анализирует вывод. Консоль отлично работает из командной строки, задача отлично работает из командной строки.

Проблема:

Я вызываю задачу в действии, основанном на представлении формы. У меня есть действие, запускающее новый php-процесс в фоновом режиме для запуска задачи, независимо от того, какая страница она породила.

Когда он переходит к вызову java, скажем exec (java -version); он выводит это:

Error occurred during initialization of VM
Unable to load native library: libjava.jnilib

Я чувствую, что это связано с тем, как я вызываю php, когда я запускаю задачу, но я теряюсь относительно того, почему у нее не будут те же библиотеки, что и при использовании командной строки.

Как я могу запустить java из задачи "background" Symfony?

Примечания

Раньше он работал без сбоев, пока я не поднял мачту с 1.9.6 до 2.0.3.

Я посмотрел: Сломанная Java Mac 10.6 но так как я могу запустить его в командной строке, это, по-видимому, другая проблема.

Я также посмотрел на Выполнение команды задачи symfony из разрешения shell_exec() отклонено, но я не думаю, что проблемы здесь.

Update:

Я сузил проблему до MAMP и добрался до php из браузера.

<?php
echo exec("java -version")
...

Будет работать при вызове из командной строки, но не при открытии php файла через браузер. Таким образом, способ настройки MAMP вызывает проблему.

Здесь информация об окружающей среде:

  • Значение переменной
  • SHELL/bin/bash
  • TMPDIR/var/folders/YH/YH + uW3hDHZyxQ5AiUtr0T ++++ TI/-Tmp -/
  • Apple_PubSub_Socket_Render/tmp/launch-3rr9ZI/Render
  • ПОЛЬЗОВАТЕЛЬ myuser
  • COMMAND_MODE unix2003
  • SSH_AUTH_SOCK/tmp/launch-zinaMI/Слушатели
  • __ CF_USER_TEXT_ENCODING 0x1F5: 0: 0
  • PATH/usr/bin:/bin:/usr/sbin:/sbin
  • PWD/
  • HOME/Пользователи/myuser
  • SHLVL 2
  • DYLD_LIBRARY_PATH/Приложения/MAMP/Library/lib:
  • LOGNAME myuser
  • DISPLAY/tmp/launch-FYrw70/org.x:0
  • _/Приложения/MAMP/Library/bin/httpd

Дайлд, кажется, присутствует здесь. Мне нужно найти способ отключить его из среды масок.

решаемые

Я выяснил решение. Это похоже на взлома, но это сработало. Я отправлю его здесь, просто если кто-то еще столкнется с той же проблемой.

Как Broken Java Mac 10.6 упоминает, что DYLD_LIBRARY_PATH должен быть отменен. Не уверен, почему, похоже, это необходимо для Unix-систем, но не для MacOSX.

Если MAMP устанавливает в /Applications/MAMP/Library/lib здесь, как отключить его: Измените /Applications/MAMP/Library/bin/envvars и прокомментируйте следующие строки

DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
export DYLD_LIBRARY_PATH

Чтобы это выглядело так:

#DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
#export DYLD_LIBRARY_PATH

Это должно устранить проблему, и java 1.6 может работать нормально.

Это взломать? или это ошибка в MAMP? Пожалуйста, ответьте, если вы знаете лучший способ решить эту проблему.

4b9b3361

Ответ 1

Это решение @paaat добавлено. Я просто отправляю сообщение, чтобы получить этот вопрос из оставшегося без ответа списка.

Я выяснил решение. Это похоже на взлома, но это сработало. Больной разместите его здесь, просто запустите кого-нибудь другого в ту же проблему.

Так как Broken Java Mac 10.6 упоминает, что DYLD_LIBRARY_PATH должен быть отменен. Не уверен, почему, похоже, это необходимо для Unix-систем, но не для MacOSX.

Если MAMP устанавливает /Applications/MAMP/Library/lib здесь, как отключить it: Edit/Applications/MAMP/Library/bin/envvars и закомментируйте следующие строки

DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
export DYLD_LIBRARY_PATH

Чтобы это выглядело так:

#DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
#export DYLD_LIBRARY_PATH

Это должно устранить проблему, и java 1.6 может работать нормально.

Обязательно перезапустите установку MAMP, чтобы изменения вступили в силу.

Ответ 2

Это сработало! Версия MAMP, которую я запускаю, 2.1.3, однако имеет другое содержимое в файле:

#if test "x$DYLD_LIBRARY_PATH" != "x" ; then
#  DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
#else
#  DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib"
#fi
#export DYLD_LIBRARY_PATH