system(escapeshellcmd($bat)) & script bash

system(escapeshellcmd($bat)) & script bash - PHP - Programmation

Marsh Posté le 09-03-2005 à 12:59:14    

Bonjours à tous ,
 
Je suis actuellement en train de chercher un moyen de lancer correctement des programmes via la commande screen intégré à un batch, et ceci depuis une interface web.
 
J'ai donc un serveur apache 2.0 , et PHP/4.3.10 sous une fedora core 3 .  
 
A l'heure actuelle je travaille avec comme aide cette page :
 
Sur toutes mes methodes proposées seule celle-ci:
 

Code :
  1. system(escapeshellcmd($bat));


 
arrive a me killer le creen en faisant appel dans la variable bat au script suivant:
 

Code :
  1. #!/bin/bash
  2. screen -dr apli01 -X quit
  3. screen -wipe


 
la variable bat contiens suivant le cas le chemin d'acces /data/log/log1/start.sh ou   /data/log/log1/stop.sh
 
Cette commande m'irait tres bien si seulement elle pouvait faire fonctionner ce script (start):
 

Code :
  1. #!/bin/bash
  2. screen -dmS apli01 ./executable -options


 
Je ne vois pas pkoi ca marche dans un sens et pas dans l'autre ?  :(  
 
Hum ... a tout hasard j'ai aussi essayé ca pour le script start.sh
 

Code :
  1. #!/bin/bash
  2. screen -dmS apli01 /data/log/log1/executable -options


 
et
 

Code :
  1. #!/bin/bash
  2. screen -dmS apli01 sh /data/log/log1/executable -options


 
Ca se lance en local mais toujours pas via mon interface web ... et par contre je peut l'arreter ...  :o  argh!
 
Merci par avance!

Reply

Marsh Posté le 09-03-2005 à 12:59:14   

Reply

Marsh Posté le 09-03-2005 à 13:24:57    

Pensez vous que "proc_open" pourrait remplacer "escapeshellcmd"? help me please :)

Reply

Marsh Posté le 09-03-2005 à 14:33:30    

je crois que personne, moi le premier, a compris ton probleme malheureusement et je peux pas t'aider dsl
bonne chance quand meme

Reply

Marsh Posté le 09-03-2005 à 15:53:12    

Boarf ? je me suis mal exprimé?

Reply

Marsh Posté le 09-03-2005 à 16:00:57    

moi j'ai compris, et j'avais le meme probleme que toi pour lancer et arreter des services sur win32.
j'arrivais bien a les arreter, mais impossible de les lancer..
j'ai jamais trouvé pourquoi...
desolé :(


Message édité par azubal le 09-03-2005 à 16:01:45
Reply

Marsh Posté le 09-03-2005 à 18:08:48    

Sur Win32 il faut utiliser les wmi ... ;)

Reply

Marsh Posté le 09-03-2005 à 18:22:30    

et la fonction system te renvoit quoi ?
sinon ya des traces dans les log ?

Reply

Marsh Posté le 09-03-2005 à 18:43:17    

la fonction systeme ne me renvoie rien à prioris, quand aux logs situés dans /var/log et /var/log je n'ai rien vus concernat les bash, screen ou systeme. Les logs apaches eux n'ont rien de spécial non plus a part un petit pbl d'alias sur les icones.

Reply

Marsh Posté le 09-03-2005 à 18:51:35    

ça serait pas un problème de droits sur le fichier ?

Reply

Marsh Posté le 09-03-2005 à 18:57:28    

J'aimerai bien ... mais j'ai fait un chown apache:grp1 -R /data/log/log1/ avec un chmod en 770, apache est lancé en tant que apache:grp1 lui aussi ... je pense pas que ca vienne de la  ... ?

Reply

Marsh Posté le 09-03-2005 à 18:57:28   

Reply

Marsh Posté le 09-03-2005 à 19:00:09    

J'ai bien une sortie system sur ma page web qui me dit que j'ai tué mon screen (lancé a la main) avec le stop.sh quand je fait l'action stop mais nada pour l'action start ... alors que le script marche nickel sur le systeme

Reply

Marsh Posté le 09-03-2005 à 19:13:42    

essaye avec un "su" juste histoire de voir

Reply

Marsh Posté le 10-03-2005 à 16:02:38    

le script marche tres bien en local , je fait un su apache (autre nom d'user en vrai mais pour l'exemple j'ai pris apache) et puis je fait un start.sh et tout se lance correctement.  
 
Le probleme viens ... bah justement d'ou?  
 
Moi je pensais à une librairie php ou un module apache à installer qui autoriserait apache et/ou php à lancer des programmes sur mon serveur ... ?

Reply

Marsh Posté le 10-03-2005 à 17:25:01    

c'est comme même bizarre qu'il n'y ai aucune trace ni sortie, essaye de faire un truc dans le genre :

Code :
  1. system(escapeshellcmd($bat.' 2>&1'), $status);
  2. echo $status;


regarde la valeur de $status et les logs (/var/log/messages et les log d'erreurs apache&php)
 
sinon regarde les notes sur http://fr.php.net/system, ya des choses qui pourrait t'aider.

Reply

Marsh Posté le 10-03-2005 à 17:54:15    

J'ai mis ton code et il me retourne ca :

Code :
  1. 126


 
*regarde son serveur et lui jette un oeil noir* Mouais ...
 
Bref ! meme si c'ets pas exlpicite ca veut dire que quelquechose se passe ... je me demandais si les mots "fork, processus parents et fils" allaient pas m'envahir la tete cette nuit ... en tout cas c'ets la premiere fois que j'ai un code erreur ... a ton avis ca correspond a quoi? un PID?

Reply

Marsh Posté le 10-03-2005 à 17:57:48    

en poussant un peu plus le raisonnement je me dis que stop.sh marche car c'est une action instantanée et start ne marche peut etre pas car c'est un screen qui lance un processus pour une durée illimitée ... mais quelle est la différence entre la maniere de lancer via PHP et le lancement via ma console ... alors que c'est le meme user ... :argh:

Reply

Marsh Posté le 10-03-2005 à 19:13:26    

J'ai trouvé ca:
 

Citation :


 Zak Estrada
14-Dec-2004 05:21
Remember to use the full path (IE '/usr/local/bin/foo' instead of 'foo') when using passthru, otherwise you'll get an exit code of 127 (command not found).


 
Hors lorsque j'ai indiqué à ma variable $bat un faux chemin d'acces il m'a retourné le code 127 ... j'en deduit donc que ces trois fabuleux chifres (126) sont une tentative de communication entre la fonction escapeshellcmd et moi meme ... a moins que ce soit php! quelqun a il déja rencontré cette erreur?

Reply

Marsh Posté le 10-03-2005 à 19:24:32    

Citation :

126 : command invoked cannot execute => permission problem or command is not an executable


donc essaye d'executer ta commande screen avec un su, un truc tu genre su -c command (je sais plus)

Reply

Marsh Posté le 10-03-2005 à 20:43:11    

Je vais essayer mais l'utilisateur qui fait tourner apache (donc php) est le meme que celui utilisé sur mon terminal! J'essaye tout de meme avec root pour voir mais si ca marche c'est bricolage niveau sécurité ... enfin déja ca dépannera ! En tout cas merci pour ton soutien Soju! Des que j'ai un résultat je te tiens au courant ;)

Reply

Marsh Posté le 10-03-2005 à 23:17:52    

J'aimerai bien pouvoir le faire mais si je met la commande "su" dans le script php ne connaitra pas le pwd lors de l'execution du site par celui-ci ... :-/ De plus je suis convaincu qu'apache a les droits suffisants puiske cela marche avec cet user en local ...  
 
Pour ce qui est des droits j'ai appliquer un chmod 777 a l'ensemble du dossier ou est l'appli en question .  
 
J'ai étudié un peu plus le code php de l'interface web, je me suis apercu que celui-ci copie les fichiers sh indiqués dans la variable $bat dans un autre dossier de mon systeme avant de les executer ... donc dans mes scripts j'ai ajouté le chemin complet en me disant que c'était ca ( en tout cas dans le script start car il devait alors chercher l'executable dans le dossier reboot de mon systeme donc pas au bon endroit) .. mais non ca n'a rien changé ! bien sur les chmod et chown sontt ok pr apache :erk:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed