Bonjour,
j'ai un script DOS (.bat) qui active en mode CLI un script PHP.
Le script DOS active le serveur APACHE dans la foulée le script PHP qui lui-même active (ou non) des procédures PHP programmées dans une table MYSQL puis s'endort une minute, et reboucle sur le début.
Bref, un système de BATCHS sans accès au compte systeme !
# =================================================================== Début de la procédure require_once "../../standards/classes/commande.class.php"; # Fonctions standard de contexte de commande $UneCommande = new Commande(); list($Module,$Message) = $UneCommande->DebuterCommande(); # début de commande set_time_limit(0); # script de durée illimitée ignore_user_abort(); # la tâche se poursuit après la fermeture du navigateur # =================================================================== Corps de la procédure # ------------------------------------------------------------------- Boucle infinie $Passage = 0; $Periode = 60; # La précision des lancements de tâches est à la minute prés while(1) { # --------------------------------------------------------------- Quelle heure ? (à la minute) $Jour = $UneCommande->ConvertirJour(date("l")); $Heure = str_pad(date("H"),2,"0",STR_PAD_LEFT); $Minute = str_pad(date("i"),2,"0",STR_PAD_LEFT); $T1 = microtime(true); # --------------------------------------------------------------- Lecture des TACHES require_once Niveau."exploitation/classes/tache.class.php"; # On en connait pas toutes les classes de Exploitation ? $UneTache = new Tache(); $UneTache->Jour = $Jour; # Jour de la semaine en anglais $UneTache->Heure = $Heure; # Heure précisée (si des zeros devant, pas de souci) $UneTache->Minute = $Minute; # Minute précisée list($Modules,$Procedures,$Parametres,$Dernieres,$Jours,$Heures,$Minutes,$Durees,$Resultats) = $UneTache->ListerTaches(); # ---------------------------------------------------------------- Recherche de la procédure à exécuter echo "Réveil ".$Passage." ".date("H:i:s").br; if (sizeof($Procedures) > 0) { if (sizeof($Procedures) > 1) { echo "Une seule tâche à la fois !! là, il y en a ".sizeof($Procedures).") ".date("Y-m-d H:i:s").br; } else { $Activation = true; $Module = $Modules[0]; $Procedure = $Procedures[0]; $Parametre = $Parametres[0]; # ------------------------------------------------------- Lecture de la TACHE identifiée $CetteTache = new Tache($Module,$Procedure,$Jour,$Heure,$Minute); if ($CetteTache->_Erreur <> "") { $Message = $CetteTache->_Erreur; } else { $Message = $CetteTache->Trouver(); if (!$CetteTache->_Existe) { echo "Si elle n'existe pas (plus), c'est bien pourri !".br; } else { # ----------------------------------------------- Une seule chose à faire à la fois !! ExecuterCommande($CetteTache,$Module,$Procedure,$Parametre,$Passage); } } if ($Message <> "") { echo $Message.br; $Message = ""; } } } # --------------------------------------------------------------- On s'endort pendant un certain temps (1mn normalement) sleep($Periode); $Passage++; }
Ce batch donne satisfaction depuis plusieures années....
Mais la trace montre, alors il n'y a rien de programmé, des endormissements de plus d'une HEURE... alors que le SLEEP est explicitement d'une MINUTE (variable $Periode).
Quelqu'un a-t-il eu ce genre de problème ?
Olivier
Partager