Java 1.6在后台Symfony任务调用时中断
我有一个Symfony任务,生成一些文件调用exec到jar,然后解析输出。 jar从命令行运行正常,任务从命令行运行正常。
问题:
我在基于表单提交的操作中调用该任务。 我有动作在后台启动一个新的PHP进程来运行任务,无论它现在产生的页面是什么。
当它进入java调用时,比如说exec(java -version); 它输出这个:
Error occurred during initialization of VM Unable to load native library: libjava.jnilib
我觉得它与我在启动任务时调用php的方式有关,但我很遗憾为什么它不会像我使用命令行时那样拥有相同的库。
如何从“后台”Symfony任务中运行java?
备注 :
它曾经毫无障碍地工作,直到我将mamp从1.9.6升级到2.0.3。
我看过: 破解Java Mac 10.6,但由于我可以从命令行运行它,这似乎是一个不同的问题。
我也看过shell_exec()权限被拒绝的执行symfony任务命令,但我不认为权限是这里的问题。
更新:
我已经将问题缩小到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 / 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,那么如何禁用它: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中的错误? 如果您知道解决此问题的更好方法,请回答。
这是@paaat添加的解决方案。 我只是张贴以从未答复的列表中获取此问题。
我找到了解决方案。 这似乎是一个黑客,但它的工作原理。 我会在这里发布它只是因为其他人遇到同样的问题。
正如Broken Java Mac 10.6所述,必须取消设置DYLD_LIBRARY_PATH。 不知道为什么,它似乎需要在Unix系统上,而不是MacOSX。
如果MAMP设置为/ Applications / MAMP / Library / lib,那么如何禁用它: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的安装,以使更改生效。
这有效! 我正在运行的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