Tengo una tarea de Symfony que genera algunas llamadas de archivos ejecutables a un contenedor y luego analiza el resultado. El jar se ejecuta bien desde la línea de comandos, la tarea se ejecuta correctamente desde la línea de comandos.Java 1.6 Roto cuando se lo llama por fondo Tarea de Symfony
El problema:
llamo la tarea en una acción basada en un envío del formulario. Tengo la acción de comenzar un nuevo proceso de php en segundo plano para ejecutar la tarea independientemente de la página que generó ahora.
Cuando se trata de la llamada java, diga exec (java -version); se da salida a esto:
Error occurred during initialization of VM
Unable to load native library: libjava.jnilib
siento que tiene que ver con la forma en que llamo php cuando comienzo a la tarea, pero estoy perdido en cuanto a porqué no tendría las mismas bibliotecas como cuando se utiliza la línea de comando.
¿Cómo puedo hacer que Java se ejecute desde la tarea Symfony 'de fondo'?
Notas:
Se utiliza para trabajar con ningún tirón hasta que upraded MAMP de 1.9.6 a 2.0.3.
He visto: Broken Java Mac 10.6 pero como puedo ejecutarlo bien desde la línea de comandos, parece ser un problema diferente.
También he visto Execute symfony task command from the shell_exec() permission denied pero no creo que los permisos sean el problema aquí.
Actualización:
he reducido el problema a MAMP y llegar a PHP desde el navegador.
<?php
echo exec("java -version")
...
funcionará cuando se llama desde la línea de comandos, pero no cuando el archivo php se abre a través del navegador. Entonces, la forma en que MAMP está configurado está causando el problema.
Aquí está la información de medio ambiente:
- Variable Valor
- SHELL/bin/bash
- TMPDIR/var/carpetas/YH/YH + ++++ uW3hDHZyxQ5AiUtr0T TI/-Tmp-/
- Apple_PubSub_Socket_Render/tmp/lanzamiento 3rr9ZI/Render
- miUsuario USUARIO
- COMMAND_MODE unix2003
- SSH_AUTH_SOCK/tmp/Launch-zinaMI/oyentes
- __CF_USER_TEXT_ENCODING 0x1F5: 0: 0
- PATH/usr/bin:/bin:/usr/sbin:/sbin
- PWD/
- INICIO/Usuarios/miUsuario
- SHLVL 2
- DYLD_LIBRARY_PATH/Aplicaciones/MAMP/Library/lib:
- LOGNAME miUsuario
- DISPLAY /tmp/launch-FYrw70/org.x:0
- _/Applications/MAMP/Library/bin/httpd
Dyld parece estar presente aquí. Necesito encontrar una manera de desarmarlo del entorno de mamp.
Resuelto
que he descubierto una solución. Parece un truco, pero funcionó. Lo publicaré aquí solo en caso de que alguien más se encuentre con el mismo problema.
Como Broken Java Mac 10.6 menciona que DYLD_LIBRARY_PATH debe estar desarmado. No estoy seguro de por qué, parece ser necesario en sistemas Unix pero no en MacOSX.
Si MAMP establece a/Aplicaciones/MAMP/Library/lib Así es como para desactivarlo: Editar /Aplicaciones/MAMP/Library/bin/envvars y comente las siguientes líneas
DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
export DYLD_LIBRARY_PATH
Así que se ve así:
#DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
#export DYLD_LIBRARY_PATH
Esto debería solucionar el problema y java 1.6 puede funcionar bien.
¿Es esto un truco? o es esto un error en MAMP? Por favor, responda si conoce una mejor manera de resolver este problema.
: "He visto: [Broken Java Mac 10.6] (http://stackoverflow.com/questions/1482450/broken-java-mac-10-6) ..." -> Comprobar su 'phpinfo (INFO_ENVIRONMENT)' para verificar el entorno de tu proceso PHP Puede ser diferente del env del shell de comando que utilizó para verificar manualmente si puede ejecutar Java. – Barend
¿Qué parte de la información del entorno estoy buscando específicamente? Java funciona bien llamado desde php en la línea de comando: 'php -r 'exec (" java -version ", $ o); echo $ o; '' echoes: 'java version" 1.6.0_26 "...' Es cuando genero el proceso php de php que no puede ejecutar java. Trataré de ver si ese camino es diferente. – paaat
He notado algo extraño, el entorno devuelve PWD como symfonyroot/web pero getcwd solo devuelve symfonyroot. No estoy seguro de si esto es significativo. – paaat