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

Bibliothèques et frameworks PHP Discussion :

[MAGENTO] Cron.php ne met pas à jour le statut en base de données


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre habitué Avatar de magicbisous-nours
    Inscrit en
    Octobre 2005
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 277
    Points : 177
    Points
    177
    Par défaut [MAGENTO] Cron.php ne met pas à jour le statut en base de données
    Bonjour à tous,
    J'ai créé un module sur Magento qui a besoin d'être exécuté tous les jours.
    J'ai donc configuré une tâche cron dans mon config.xml et j'ai activé ma crontab.
    Mon problème se déroule comme suit :
    • Au premier appel de cron.php, de nouvelles lignes correspondant à mon module sont créées dans la table cron_schedule. La colonne status est à "pending" et les colonnes executed_at et finished_at sont à null (jusque là, tout va bien).
    • Au deuxième appel de cron.php (5mn plus tard), la table cron_schedule est mise à jour : la colonne executed_at correspondant à mon module est mise à la date/heure courante. La colonne status n'est pas mise à jour à "running" (ce qui serait le fonctionnement normal) et mon script est appelé.
    • Au troisième appel, mon script tourne encore (il met un peu plus de 8mn à s'exécuter) mais le système, voyant le statut "pending" de la tâche précédente, met à nouveau à jour la même ligne de la table cron_schedule en écrasant executed_at et relance mon script. Ce qui me génère une erreur de base de données, mon script faisant des insertions, s'il est appelé deux fois, une contrainte d'intégrité ne fonctionne plus.


    Voici mon config.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <crontab>
        <jobs>
            <archive_quotes>
                <schedule>
                    <cron_expr>*/15 * * * *</cron_expr>
                </schedule>
                <run>
                    <model>quotes_archive/cron::archive</model>
                </run>
            </archive_quotes>
        </jobs>
    </crontab>
    Et voici la déclaration de ma classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class Namespace_QuotesArchive_Model_Cron
    {
        public function archive() {
            // Mon code
        }
    }
    Quelqu'un aurait une idée de pourquoi la colonne status n'est pas mise à jour ?

    Merci d'avance
    [/HS]

    J'adorerai changer le monde, mais pas moyen de mettre la main sur le code source

  2. #2
    Membre habitué Avatar de magicbisous-nours
    Inscrit en
    Octobre 2005
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 277
    Points : 177
    Points
    177
    Par défaut
    J'ai trouvé la réponse à ma question, je la mets ici, ça peut servir à quelqu'un d'autre :
    La colonne status est mise à "running" uniquement lorsque dans la balise <cron_expr> du fichier config.xml on a renseigné "always" (sans les guillemets).
    Dans tous les autres cas, la colonne n'est pas mise à jour.

    De mon côté, en production mon script ne tournera qu'une fois par jour (à heure fixe), ce qui lui laissera 24h pour s'exécuter avant que cron.php ne le lance à nouveau, ce qui résout mon problème.
    [/HS]

    J'adorerai changer le monde, mais pas moyen de mettre la main sur le code source

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

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