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 :
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
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>
Quelqu'un aurait une idée de pourquoi la colonne status n'est pas mise à jour ?
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 } }
Merci d'avance
Partager