Java 1.6 Broken when call by background Symfony task

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

Проблема:

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

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

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

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

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

Примечания:

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

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

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

Обновление:

Я сузил проблему до 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
  • USER myuser
  • COMMAND_MODE unix2003
  • SSH_AUTH_SOCK /tmp/launch-zinaMI/Listeners
  • __CF_USER_TEXT_ENCODING 0x1F5: 0:0
  • PATH /usr/bin:/bin:/usr/sbin:/sbin
  • PWD /
  • HOME /Users/myuser
  • SHLVL 2
  • DYLD_LIBRARY_PATH /Applications/MAMP/Library/lib:
  • LOGNAME myuser
  • DISPLAY /tmp/launch-FYrw70/org. x:0
  • _ /Applications/MAMP/Library/bin/httpd

Dyld, похоже, присутствует здесь. Мне нужно найти способ удалить его из окружения mamp.

Решено

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

Как 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? Пожалуйста, ответьте, если вы знаете лучший способ решить эту проблему.

28
задан Community 23 May 2017 в 11:55
поделиться