J'utilise Apache avec PHP pour exécuter un script bash et je rencontre un problème. Pseudo code ...Aide pour l'exécution du script bash depuis PHP
Website Button -> Click -> jQuery.post("file.php") -> php: system("/home/user/file.sh cmd") -> bash: screen -S name -> bash: java -jar file.jar
Le script bash commence alors une session écran nommé et exécute une application Java (java -jar file.jar
) à l'intérieur de celui-ci. J'ai presque tout ce travail. La seule chose qui ne fonctionne pas est lorsque l'application Java est lancée, elle est incapable de lire un, parmi plusieurs, de ses fichiers de configuration locaux.
Apache fonctionne le même utilisateur qui possède le répertoire et le script bash et l'application Java (un utilisateur local). Si le script bash est exécuté directement à partir de l'interface de ligne de commande, le même utilisateur que Apache s'exécute sous, tout fonctionne à 100%. Les autorisations de fichiers ne sont pas un problème.
Mon vrai problème ici est de trouver ce qu'il faut blâmer. L'application Java est-elle codée incorrectement, en recherchant le mauvais emplacement pour la configuration? fichier? Mon code PHP est-il faux? Apache a t-il tort? Est-ce que l'un des scripts manque TERM et donc casser quelque chose? Je ne sais vraiment pas par où commencer.
Je répète, si je coupe PHP et le site Web et exécutez le script bash de la ligne de commande, cela fonctionne. Si j'exécute le script depuis PHP, l'un des fichiers de configuration de l'application Java ne peut pas être lu.
Il y a beaucoup de code ici, entre le HTML, Javascript, PHP et bash. Si vous pensez que ça va m'aider à poster chaque script, je le ferai.
Edit: La dernière chose que j'ai essayé est de confirmer que le répertoire de travail dans mon script php est correct .. Les parties pertinentes ci-dessous:
<?php
session_start();
$action = $_REQUEST['action'];
$user = "public";
$home = "/home/minecraft/$user/mc/";
$script = "minecraft.sh";
$lck = "/home/minecraft/$user/mc/server.log.lck";
chdir($home);
function perform_action($action, $script, $home){
echo("Performing $script $action\n");
system("sh -c 'cd $home && ./$script $action'");
}
?>
Je suis d'abord en train de changer dans le répertoire approprié, puis en exécutant le script (qui démarre l'écran, puis l'application java à l'intérieur) à partir du répertoire de travail en cours. Si j'étais dans le mauvais répertoire, le fichier n'existerait pas et ne commencerait donc pas.
EDIT: Voici les résultats de l'utilisateur et l'environnement web, avant et après: http://pastebin.com/ip0McMUc
Bonne idée. J'ai juste essayé, mais j'ai toujours le même problème. group-txt-location =/home/minecraft/public/mc/groups.txt – Kyle
Pour vous assurer que vous pouvez exécuter file.sh à partir de différents dossiers tels que/et qu'il fonctionne toujours? –
Oui, si je cd /; /home/minecraft/public/mc/minecraft.sh start, tout fonctionne. – Kyle