Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/01/2011, 21h39   #1
Nouveau Membre du Club
 
Inscription : octobre 2008
Messages : 93
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 93
Points : 30
Points : 30
Par défaut Execution simultanée via Cron de scripts php

Bonjour,

Je souhaiterai mettre en place un cron sur un fichier php qui lui même doit appeller l'exécution d'autres fichiers php.

Ces requêtes doivent se faire forcément en même temps.

Le cron appelle "cron.php" qui est un script qui se charge d'appeller N autres fichiers nommés N1.php, N2.php, ... Ces Nx.php ont des temps d'exécution de 1min environ.
Le hic c'est que le nombre de Nx.php est variable et est géré par le "cron.php" donc je ne peux pas programmer en cron directement les fichiers Nx.php

Qui saurait comment gérer l'appel simultané de ces fichiers ?

Merci.
zeflex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 22h01   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Tu peux avoir des include() dans ton cron.php

Ca sera consecutif mais bon en informatique simultanée c'est un peu étrange comme concept je pense.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 22h04   #3
Nouveau Membre du Club
 
Inscription : octobre 2008
Messages : 93
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 93
Points : 30
Points : 30
En effet en ce moment j'utilise des include mais ca ne gère pas la simultanéité.

Hors dans mon cas j'en ai besoin. Disons qu'en javascript je pourrais gérer ces appels en simultanés sauf qu'en cron, javascript n'est pas interprété.

N'y a t'il pas un moyen de contourner cela ? Je ne peux pas me permettre d'arrêter les scripts précédents pour exécuter les nouveaux.
zeflex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 09h35   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
On peut alors imaginer que ton cron.php crée des taches cron.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 17h26   #5
Nouveau Membre du Club
 
Inscription : octobre 2008
Messages : 93
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 93
Points : 30
Points : 30
Oui on pourrait dire ca comme ca.

Je ne peux pas appeler ces fichiers là via des taches cron car on n'as pas forcément besoin d'appeler tous ces fichiers à la fois, sachant que si j'ai besoin, j'en aurai besoin de 4 une semaine, de 15 la semaine d'après et ainsi de suite.

D'où l'utilité pour moi de se servir de "cron.php".
zeflex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 18h09   #6
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Tu n'as pas lu ce que j'ai écris, si tes taches cron sont crées par ton fichier php, tu mets ce que tu veux quand tu veux.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 18h29   #7
Nouveau Membre du Club
 
Inscription : octobre 2008
Messages : 93
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 93
Points : 30
Points : 30
Si j'ai lu ce que tu as écris

En fait dans mon "cron.php" actuellement il y'a :

Code :
1
2
3
4
5
 
while ( $row = mysql_fetch_array($sql) ) {
	$groupe = $row['groupe'];
	include 'sous-cron.php';
}
Sauf qu'à chaque include, le temps d'exécution de "sous-cron.php" est d'environ 1min.
Hors j'ai besoin que la boucle soit instantanée ; je n'ai pas besoin d'attendre la réponse de chaque "sous-cron.php".

Je sais pas si c'est peut etre plus compréhensible ?
zeflex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 22h43   #8
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
J'avais bien compris et je ne te parlais pas de faire des include() mais de créer des taches cron.

Mais après tout, tu pourrais aussi lancer les fichiers PHP en ligne de commande avec exec().
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 23h33   #9
Nouveau Membre du Club
 
Inscription : octobre 2008
Messages : 93
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 93
Points : 30
Points : 30
C'est à dire que je pourrais mettre plusieurs exec les uns à la suite des autres et ils s'exécuteraient en même temps ?

Je ne connais pas la syntaxe pour exec afin d'appeler/executer un fichier php, un exemple par hasard ?
zeflex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2011, 10h18   #10
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
http://php.net/manual/fr/features.commandline.php
sous linux il faut ajouter un & a la fin de la commande je crois pour pouvoir les enchainer sans attente.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2011, 18h25   #11
Nouveau Membre du Club
 
Inscription : octobre 2008
Messages : 93
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 93
Points : 30
Points : 30
Merci.

En regardant un peu j'ai trouvé ceci :
Code :
passthru("/usr/bin/php /var/www/vhosts/ndd.info/httpdocs/nntp-admin/testexec.php?mode=test >> /var/www/vhosts/ndd.info/httpdocs/nntp-admin/log_file.log 2>&1 &");
Sauf que je n'arrive pas à faire passer la variable "mode".

Dans le log_file.log j'ai ceci :
Citation:
Could not open input file: /var/www/vhosts/ndd.info/httpdocs/nntp-admin/testexec.php?mode=test
Comment puis-je faire svp ?
zeflex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2011, 18h56   #12
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Tu ne peux pas passer des variables GET en ligne de commande ; il faut adapter ton script pour qu'il prenne les variables de la ligne de commande.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2011, 19h21   #13
Nouveau Membre du Club
 
Inscription : octobre 2008
Messages : 93
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 93
Points : 30
Points : 30
Citation:
Envoyé par sabotage Voir le message
Tu ne peux pas passer des variables GET en ligne de commande ; il faut adapter ton script pour qu'il prenne les variables de la ligne de commande.
Ca se contredis pas ce que tu dis ? Où alors je piges pas bien la subtilité.

Si on ne peux pas passer de variables, comme adapter le script pour qu'il prenne les variable ?

Désolé je n'aime pas qu'on me maches de trop le travail mais c'est vrai que là ca fait un bon bout de temps que je m'arrache les cheveux là dessus .
zeflex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2011, 20h55   #14
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Tu peux passer des variables en ligne de commande comme tu le vois dans la doc, ca fonctionne differement d'un contexte web.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2011, 01h30   #15
Nouveau Membre du Club
 
Inscription : octobre 2008
Messages : 93
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 93
Points : 30
Points : 30
Peux tu m'aiguiller un peu plus, j'ai toujours du mal à ce niveau là à saisir :s
zeflex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 15h39   #16
Membre Expert
 
Inscription : janvier 2007
Messages : 1 452
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2007
Messages : 1 452
Points : 1 914
Points : 1 914
Il faut que tu regardes argv et argc (variables globales).
Pour la simultanéité tu peux faire comme plus haut avec le &.

Ou bien forker ton process php
a+
kaymak est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/02/2011, 11h28   #17
Rédacteur/Modérateur
 
Avatar de Thes32
 
Homme
Développeur Web
Inscription : décembre 2006
Messages : 2 335
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2006
Messages : 2 335
Points : 3 774
Points : 3 774
Citation:
Envoyé par kaymak Voir le message
Il faut que tu regardes argv et argc (variables globales).
Pour la simultanéité tu peux faire comme plus haut avec le &.
appel du script
Code :
php test_cli.php a b c d
test_cli.php
Code :
1
2
3
4
5
6
 
<?php
 
var_dump( $argv );
 
?>
résultat

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
array(5) {
  [0]=>
  string(8) "test_cli.php"
  [1]=>
  string(1) "a"
  [2]=>
  string(1) "b"
  [3]=>
  string(1) "c"
  [4]=>
  string(1) "d"
}
__________________
Développeur | Zend Certified Engineer

Étapes Pour mieux se servir du forum:
1. Commencez par lire les cours et tutoriels ;
2. Faites une recherche;
3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

Nix>_Rien n'est plus pratique que la théorie
Thes32 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/02/2011, 22h01   #18
Nouveau Membre du Club
 
Inscription : octobre 2008
Messages : 93
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 93
Points : 30
Points : 30
Merci à vous, ca fonctionnes ! J'obtiens bien le résultat que je veux avec en plus la simultanéité d'exécution de mes scripts

Résolu !
zeflex est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h05.


 
 
 
 
Partenaires

Hébergement Web