Aller au contenu

PHP Ligne de commande ...


petit-ourson

Sujets conseillés

Bonjour tout le monde.

J'exécute certains scripts en ligne de commande qui prennent plus ou moins beaucoup de temps.

Tout à la fin de mon script (dernière ligne), j'affiche une alerte 'Script terminé' qui me permet de savoir ... quand le script se termine.

Le tout est lancé dans via un cron.

Bizarrement, quand je regarde les processus qui tournent 5 minutes après la fin de mon script... Mon script tourne toujours et bouffe de plus en plus de mémoire...

Une idée ?

Lien vers le commentaire
Partager sur d’autres sites

Sans voir le code c'est compliqué...

Peut etre une boucle non finie ?

Un script d'exécution non breaké ?

peux tu en dire ou montrer plus ?

Lien vers le commentaire
Partager sur d’autres sites

Pour une tache cron, il ne faut pas qu'il y ait de sortie écran, sinon ca va te générer des logs sans intérets.

Ceci dit, ca ne devrait pas être la raison de ton ralentissement.

Le tout est lancé dans via un cron.

t'as mangé un mot ? :D

Lien vers le commentaire
Partager sur d’autres sites

Peut etre une boucle non finie ?

Un script d'exécution non breaké ?

A la fin de mon script je ne suis plus dans une boucle.

Ma dernière ligne qui s'affiche se trouve sur la dernière ligne de mon script.

Pour une tache cron, il ne faut pas qu'il y ait de sortie écran, sinon ca va te générer des logs sans intérets.

Je redirige tout vers un fichier, mais il n'y a pas d'affichage (normalement) s'il n'y a pas d'erreurs (php).

t'as mangé un mot ? :D

Non ... j'ai oublié de manger le "dans" :P

Je soupçonne la connexion ssh2 pour le transfert sftp qui ne veut pas se fermer... mais je ne vois pas comment la fermer. lol

Lien vers le commentaire
Partager sur d’autres sites

Est-ce que le process est en Zombi ?

As tu regarder s'il a des process fils qui ne serait pas fini ?

J'ai eu le probleme sous HP-UX avec un popen() : c'etait du a l'OS qui ne detruisait pas les process fils creer par le popen() tant que pere n'etait pas terminer.

A la fin, je me retrouvais avec des milliers de process (si si, des milliers :blush: ) zombi, qui, bizarrement, bouffait un max de CPU ...

Lien vers le commentaire
Partager sur d’autres sites

Ben sous HP-UX, dans top il te met STATUS = Zombi, par contre, je me souviens plus ce que ca donne sous les autres OS ...

D'une maniere generale, comme le process parent n'existe plus, le PPID du process passe a 0 ou a 1 suivant les OS. Apres, il faut faire le menage dans la liste des process car tout ce qui est demonds a aussi un PPID a 1.

Je n'ai pas de nunux sous la main pour verifier ...

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Quand tu dis :

Je soupçonne la connexion ssh2 pour le transfert sftp qui ne veut pas se fermer... mais je ne vois pas comment la fermer. lol

Pourquoi n'utilise tu pas SCP, bcp plus sur qu'un sftp et en plus tu n'auras pas les pb de connexion non fermee sur ton serv distant.

Apres, il faudrait juste expliquer ce que fait ton script (sans forcement paster le code), pour voir d'ou pourrait venir le pb.

Voila, bon courage

Lien vers le commentaire
Partager sur d’autres sites

Ben sous HP-UX, dans top il te met STATUS = Zombi, par contre, je me souviens plus ce que ca donne sous les autres OS ...

D'une maniere generale, comme le process parent n'existe plus, le PPID du process passe a 0 ou a 1 suivant les OS. Apres, il faut faire le menage dans la liste des process car tout ce qui est demonds a aussi un PPID a 1.

Je vais voir cela.

Pourquoi n'utilise tu pas SCP, bcp plus sur qu'un sftp et en plus tu n'auras pas les pb de connexion non fermee sur ton serv distant.

Apres, il faudrait juste expliquer ce que fait ton script (sans forcement paster le code), pour voir d'où pourrait venir le pb.

En gros, mon script génère des fichiers XML à partir de ma base de données et en fonction du client, j'envoie ces fichiers par ftp, sftp, soap ou sur un support local comme un disque dur (la méthode est choisi par le client).

J'utilise donc les fonctions ssh2 de php pour les connexions en ssh2 : http://fr2.php.net/manual/fr/ref.ssh2.php

Lien vers le commentaire
Partager sur d’autres sites

OK.

Il faudrait que tu essayes de scinder les 2 parties de ton script pour voir laquelle est responsable de ta fuite de memoire.

Essaye dans un premier temps de generer tes xml et de voir si ta memoire continue d'augmenter.

Si ce n'est pas le cas, il faudra voir si un de tes protocoles de transfert en est responsable en les testant 1 par 1 (envoie d'abord en ftp, test de la memoire, en sftp test de la memoire, ...)

Lien vers le commentaire
Partager sur d’autres sites

D'après ce que je vois, cela ne fonctionne pas que pour l'envoi vers un seul client en sftp (donc en utilisant les fonctions ssh2 de php).

Il faudrait que j'arrive a fermer proprement la connexion (vu que visibilement il n'arrive pas à le faire à la fon du script), mais je ne trouve pas la bonne fonction...

Lien vers le commentaire
Partager sur d’autres sites

Bon on avance ;)

Dans ce que je te disais dans le post precedent, tu peux utiliser scp puisque tu as un acces ssh sur la becanne distante (scp utilise le protocole ssh2 et il est tres simple a utiliser) et il est dispo dans le lien que tu avais poster pour les fonctions ssh2 de php. Il s'agit simplement d'un secur copy utilisant SSH. En plus, une fois le fichier envoye, scp coupe automatiquement la connexion.

Si tu n'as pas de dossier a creer sur le serv distant, cela devrait suffir largement.

voila.

Lien vers le commentaire
Partager sur d’autres sites

Et si ... j'ai des dossiers à créer ou supprimer, des répertoires à lister, des tailles de fichiers à récupérer, etc.

Je crois que je l'avais utilisé un moment mais que cela me posait un soucis. Je vais re-tester cela.

Lien vers le commentaire
Partager sur d’autres sites

Bon on va oublier scp alors.

Je viens de regarder plus precisement les fonctions sftp de php.

Apparement il demande un sous-systeme sftp, ce qui doit etre la cause de ta fuite de memoire (puisque la connexion n'est pas fermee, et qu'il doit forke le sftp).

Cependant, il y a une solution :smartass:

Regarde ici : ssh2_connect et tu verras que tu as un callback optionel qui te sert a te deconnecter du serveur distant (et par la meme occasion detruire le sous-systeme (qui doit etre forke sur ta becanne)).

Jette un oeil au premier exemple donne, il utilise la fonction callback pour se deconnecter.

Bon courage.

Lien vers le commentaire
Partager sur d’autres sites

Merci !!

Apparemment en ajoutant le code suivant :

ssh2_exec($this->ftphandle, 'exit');
$this->ftphandle = false; // Pas forcément nécessaire

Tout semble aller mieux... Espérons que ce n'est pas qu'une impression.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...