IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Execution simultanée via Cron de scripts php


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    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.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    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.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    Par défaut
    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.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    On peut alors imaginer que ton cron.php crée des taches cron.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    Par défaut
    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".

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    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.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    Par défaut
    Si j'ai lu ce que tu as écris

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    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().
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    Par défaut
    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 ?

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    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.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    Par défaut
    Merci.

    En regardant un peu j'ai trouvé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :
    Could not open input file: /var/www/vhosts/ndd.info/httpdocs/nntp-admin/testexec.php?mode=test
    Comment puis-je faire svp ?

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    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.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    Par défaut
    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 .

  14. #14
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu peux passer des variables en ligne de commande comme tu le vois dans la doc, ca fonctionne differement d'un contexte web.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  15. #15
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    Par défaut
    Peux tu m'aiguiller un peu plus, j'ai toujours du mal à ce niveau là à saisir :s

  16. #16
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut
    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+

  17. #17
    Membre Expert
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    php test_cli.php a b c d
    test_cli.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
     
    var_dump( $argv );
     
    ?>
    résultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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"
    }

  18. #18
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    Par défaut
    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 !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Cron et script php sur Ubuntu 13.10
    Par secral dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 18/12/2013, 14h21
  2. Cron et script php
    Par PKO06 dans le forum Administration système
    Réponses: 0
    Dernier message: 13/03/2009, 12h34
  3. [Système] executer un programme via un script php
    Par jeanfrancois dans le forum Langage
    Réponses: 9
    Dernier message: 08/02/2006, 15h51
  4. Pb d'execution de requete avec un script php
    Par ythierrin dans le forum Requêtes
    Réponses: 3
    Dernier message: 22/08/2003, 14h34
  5. Pb d'execution de requete avec un script php
    Par ythierrin dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 22/08/2003, 14h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo