[résolu] Exec() dans un fichier batch

Exec() dans un fichier batch [résolu] - PHP - Programmation

Marsh Posté le 16-02-2011 à 11:31:44    

bonjour à tous,
 
j'ai besoin de traiter par batch de nuit via un fichier PHP des enregistrements retournés par une requete SQL.
 
le souci est qu'à terme ce sont plus de quelques centaines d'enregistrements qui doivent etre traités par ce batch.
 
je sui en mutu, donc pas d'accès au serveur en SSH, donc j'ai pensé à faire un truc du genre pour pouvoir éxécuté mon script sur l'ensemble des enregistrements retournés :
 
- SELECT pour extraire les enregistrements concernés  
- ensuite je fais une boucle pour faire une commande EXEC qu va exectuter le script de traitement par tranche.
 
comment dois-je écrire mon script PHP ?
 
j'avais pensé à un truc du genre (lorsque ma requete me retourne 2000 lignes à traiter par lot de 10, par ex) :
 

Code :
  1. for($i=0;$i<2000; $i += 10) :
  2. exec("php monscript.php?start=".$i);
  3. endfor;


 
mais je ne suis pas sûr de la ligne 2. Chemin absolu à indiquer ?
Merci de votre aide.


Message édité par sebnutt le 17-02-2011 à 09:46:23
Reply

Marsh Posté le 16-02-2011 à 11:31:44   

Reply

Marsh Posté le 16-02-2011 à 13:50:46    

tu vas faire comment pour planifier la tache sur du mutualisé ?

Reply

Marsh Posté le 16-02-2011 à 14:08:58    

OVH propose un CRON pour ses offres mutualisées


Message édité par sebnutt le 16-02-2011 à 14:12:06
Reply

Marsh Posté le 16-02-2011 à 14:30:33    

ils font les choses bien chez OVH :D

 

hum pourquoi tu ne fais pas tes requetes SQL directement dans ton fichier php ? je pîge pas pourquoi tu veux faire ça par tranches.
dans ton cron tu executes le fichier php la nuit, pis voila.
pour les chemins ué perso je mets des chemins absolus au cas ou les path ne soient pas dans les environnements.


Message édité par rengzehn le 16-02-2011 à 14:31:58
Reply

Marsh Posté le 16-02-2011 à 14:37:19    

pour chaque enregistrement résultant de ma requete, j'ai trois requetes SQL à passer (mises à jour de profils, etc..)
 
donc quand je me retrouverai avec 2000 lignes à traiter, j'aurai 6000 requetes à passer. Avec un timeout de 30 se j'aurais jamais le temps de tout traiter en une fois.
 
D'ou l'idée d'executer plusieurs fois le script en meme temps.

Reply

Marsh Posté le 16-02-2011 à 16:11:33    

max_execution_time : This sets the maximum time in seconds a script is allowed to run before it is terminated by the parser. This helps prevent poorly written scripts from tying up the server. The default setting is 30. When running PHP from the command line the default setting is 0.
 
donc si t'appelles php en lui envoyant un script ça doit etre bon, pas de timeout.

Reply

Marsh Posté le 16-02-2011 à 17:24:22    

ce serait donc si simple ?
je vais tester et je te dis ce qu'il en est.
 
Merci en tous cas.

Reply

Marsh Posté le 16-02-2011 à 17:41:56    

Code :
  1. <?php exec("usr/local/bin/phpphp /homez.XXX/monsite/www/cron.php" ); ?>


 
n'execute pas le script (censé juste mettre à jour ma BDD)
cron.php exécuté depuis mon navigateur, oui.
 
j'y comprends rien.


Message édité par sebnutt le 16-02-2011 à 17:42:30
Reply

Marsh Posté le 16-02-2011 à 17:44:59    

loule :))) non fais pas comme ça, php avec un exec de php sur un php  :pt1cable: autant faire un require :D

 

il est proposé comment le service cron d'OVH ? comment il s'utilise ?

 

tu fais un btach avec /.../php -f fichier.php

 

je crois que pour passer un fichier à php c l'option -f (ou -e je c plus je confonds avec perl)


Message édité par rengzehn le 16-02-2011 à 17:52:41
Reply

Marsh Posté le 16-02-2011 à 17:48:19    

http://guides.ovh.com/MutualiseCron

 

si c juste ça (screen du bas) tu mets juste ton cron.php dans "script à exécuter"

 

ou bien

 

http://www.ovh.com/fr/hebergement_ [...] rontab.xml


Message édité par rengzehn le 16-02-2011 à 17:51:58
Reply

Marsh Posté le 16-02-2011 à 17:48:19   

Reply

Marsh Posté le 16-02-2011 à 17:57:08    

dans ce cas-là, je ne serai pas concerné par le temps d'exécution du script, je viens de penser à ça ?
 
je vais faire  le test, 1000 mercis.

Reply

Marsh Posté le 16-02-2011 à 17:59:50    

non tu seras pas concerné par le timeout à prioris c'est leur cron qui appelra ton fichier avec php (spour ça qu'il y a un menu déroulant qui demande le type du fichier que tu osuhaites). Enfin, je suppose :)
 
essaye un
 
sleep(50);
echo "plop";

Reply

Marsh Posté le 16-02-2011 à 22:42:01    

je confirme : d'après les logs de test, le script cron.php est bien lancé en ligne de commande automatisée.
 
C'est tout bon.


Message édité par sebnutt le 16-02-2011 à 22:42:09
Reply

Sujets relatifs:

Leave a Replay

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