28 votes

Java 1.6 cassé lorsqu'il est appelé par la tâche Symfony en arrière-plan

J'ai une Symfony tâche qui génère des fichiers d'appels exec pour un pot et analyse ensuite la sortie. Le pot fonctionne très bien à partir de la ligne de commande, la tâche s'exécute correctement à partir de la ligne de commande.

Le problème:

J'appelle la tâche dans une action fondée sur la soumission d'un formulaire. J'ai l'action de démarrer une nouvelle version de php processus en arrière-plan pour exécuter la tâche indépendamment de ce que la page de la donné naissance à aujourd'hui.

Quand il arrive à la java appeler, dire exec(java -version); il affiche ceci:

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

Je pense que ça a à voir avec la façon dont je l'appelle php quand j'ai commencer la tâche, mais je suis perdu pour expliquer pourquoi il n'aurait pas les mêmes bibliothèques que lorsque j'utilise la ligne de commande.

Comment puis-je faire d'exécution java à partir de la "toile de fond" de Symfony tâche?

Notes:

Il l'habitude de travailler sans accroc jusqu'à ce que je upraded mamp de 1.9.6 2.0.3.

J'ai regardé: Cassé Java Mac 10.6 mais depuis que j'ai peut fonctionner correctement à partir de la ligne de commande il me semble être un problème différent.

J'ai aussi regardé Exécuter symfony tâche de commande de la shell_exec() de refus d'autorisation , mais je ne pense pas que les autorisations sont la question ici.

Mise à jour:

J'ai réduit le problème de MAMP et arriver à php à partir du navigateur.

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

Fonctionne lorsqu'il est appelé à partir de la ligne de commande, mais pas quand le fichier php est ouvert dans le navigateur. Donc la manière de MAMP est configuré à l'origine du problème.

Voici l'environnement de l'info:

  • Valeur De La Variable
  • SHELL /bin/bash
  • TMPDIR /var/folders/YH/YH+uW3hDHZyxQ5AiUtr0T++++TI/-Tmp-/
  • Apple_PubSub_Socket_Render /tmp/lancement-3rr9ZI/Render
  • L'UTILISATEUR myuser
  • COMMAND_MODE unix2003
  • SSH_AUTH_SOCK /tmp/lancement-zinaMI/Auditeurs
  • __CF_UTILISATEUR_TEXTE_ENCODAGE 0x1F5:0:0
  • CHEMIN /usr/bin:/bin:/usr/sbin:/sbin
  • PWD /
  • HOME /Utilisateurs/myuser
  • SHLVL 2
  • DYLD_LIBRARY_PATH /Applications/MAMP/Library/lib:
  • LOGNAME myuser
  • AFFICHAGE /tmp/lancement-FYrw70/org.x:0
  • _ /Applications/MAMP/Library/bin/httpd

Dyld semble être présent ici. J'ai besoin de trouver un moyen de la désactiver à partir de mamp de l'environnement.

Résolu

J'ai trouvé une solution. Il semble comme un hack, mais cela a fonctionné. Je vais le poster ici juste au cas où quelqu'un d'autre s'exécute dans le même problème.

Comme Cassé Java Mac 10.6 mentionne le DYLD_LIBRARY_PATH doit être défini. Je ne sais pas pourquoi, il semble nécessaire sur les systèmes Unix, mais pas MacOSX.

Si MAMP définit dans /Applications/MAMP/Library/lib voici comment le désactiver: Modifier /Applications/MAMP/Library/bin/envvars et commenter les lignes suivantes

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

De sorte qu'il ressemble à ceci:

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

Cela devrait corriger le problème et la version 1.6 de java peut fonctionner correctement.

Est-ce un hack? ou est-ce un bug dans MAMP? Merci de répondre si vous connaissez une meilleure façon de résoudre ce problème.

12voto

barsju Points 3356

C'est la solution de @paaat ajouté. Im juste de poster pour obtenir cette question de la réponse de la liste.

J'ai trouvé une solution. Il semble comme un hack, mais cela a fonctionné. Je vais le poster ici juste au cas où quelqu'un d'autre s'exécute dans le même problème.

Comme des bris de Java Mac 10.6 mentionne le DYLD_LIBRARY_PATH doit être défini. Je ne sais pas pourquoi, il semble nécessaire sur les systèmes Unix, mais pas MacOSX.

Si MAMP définit dans /Applications/MAMP/Library/lib voici comment désactiver c': Edition /Applications/MAMP/Library/bin/envvars et commentez l' lignes suivantes

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

De sorte qu'il ressemble à ceci:

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

Cela devrait corriger le problème et la version 1.6 de java peut fonctionner correctement.

Assurez-vous de redémarrer votre installation de MAMP pour que les modifications prennent effet.

3voto

Ben Sullins Points 122

Ça a marché! La version de MAMP que j'utilise, 2.1.3, a cependant un contenu différent dans le fichier:

 #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
 

0voto

Air Points 726

Cela a fonctionné pour moi:

 <?php
  exec('export DYLD_LIBRARY_PATH=""; java -version');
?>
 

Les références:
- https://drupal.org/node/1257654
- Appel de java depuis PHP exec

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X