Mise en place du CRON de Magento sur un serveur privé

Dans: Magento

23 sept 2009

Magento a besoin une fois par jour, ou pas nuit,  d’actualiser sa base de données. Cela concerne :

  • Les règles de prix du catalogue ;
  • L’envoie des newsletters ;
  • La génération du sitemap Google ;
  • Les alertes des utilisateurs (changement de prix, produit de nouveaux en stock) ;
  • Nettoyage des logs ;
  • Etc.

Pour cela, Magento est fourni avec un fichier « cron.php » situé à la racine de votre plateforme (/app … /skin … /cron.php) qui en étant exécuté (avec les bons droits) effectue toutes les actions de mises à niveau de Magento.

Il est donc indispensable d’avoir un tâche CRON, un programme qui s’exécute à heure fixe, sur ce fichier cron.php. Nous demandons donc au serveur de lancer ce fichier chaque nuit à la même heure.

  1. CRON depuis le Webmin d’OVH
  2. CRON en SSH
  3. (facultatif) Modification du fichier cron.php

Etape 1 : CRON Depuis le Webmin d’OVH

L’intérêt ici est d’effectuer cette action directement depuis l’interface d’administration des serveurs privés d’OVH, le Webmin et non en SSH.

  • Connectez-vous à votre Webmin > Système > Tâches cron ( https://rxxxxxxx.ovh.net:10000/cron/ )
  • Cliquez sur « Créer une nouvelle tâche cron programmée »
  • Remplissez les champs :
    • S’exécute en tant que : Root
    • Actif : Oui
    • Commande : /usr/local/bin/php5 -f /home/*****/www/cron.php
      • Ce chemin est composé du chemin absolu vers PHP5 puis -f puis du chemin absolu vers votre fichier cron.php
    • Entrée de la commande : Laissez vide
    • Description : Mettez de que vous voulez. (Cron Magento : Update Price, etc. par exemple)
  • Sélectionnez :
    • Planification simple : Tous les jours à minuit
  • Sauvegardez votre tâche

Sélectionnez ensuite votre tâche cron et exécutez-la manuellement une fois (« Exécuter maintenant »)

Vous devriez avoir :

Sortie de la commande /usr/local/bin/php5 -f /home/*****/www/cron.php ..
Aucune sortie générée

Etape 2 : CRON en SSH

wget -O - -q -t 1 http://www.monsite.com/cron.php

Pour planifier une tache en cron sous un serveur Unix, il existe aussi beaucoup de ressources sur Internet.

Etape 3 : (facultatif) Modification du fichier cron.php

Des utilisateurs ont toujours un problème de prix même après la mise en place du CRON.

D’après un commentaire posté en dessous de cet article, il est possible de corriger cela en modifiant la fin du fichier cron.php

try {
 Mage::getConfig()->init()->loadEventObservers('crontab');
 Mage::app()->addEventArea('crontab');
 Mage::dispatchEvent('default');
 $ob = Mage::getModel('catalogrule/observer');
 $ob->dailyCatalogUpdate("0 1 * * *");
} catch (Exception $e) {
 Mage::printException($e);
}

Via.

7 Commentaires pour Mise en place du CRON de Magento sur un serveur privé

Avatar

Kevin

septembre 23rd, 2009 à 19 h 46 min

J’avais pas du tout pensé au Cron, et votre tutoriel est claire net et précis, merci à vous de partager tout ceci sur le net !

Avatar

Fred

septembre 23rd, 2009 à 20 h 02 min

Bonjour,

Oui c’est justement le but :).

Le principe est d’aller à l’essentiel pour éviter de perdre du temps lors des prochaines fois.

Même si le Cron n’est pas la chose la plus difficile pour Magento, il faut quand même le prendre en compte sinon la boutique ne tournera pas correctement.

Avatar

plancton

septembre 30th, 2009 à 15 h 57 min

Le cron peut ne pas s’éxécuter correctement, ce qui se traduit par des règles de prix catalogue non appliquées par exemple (ou le sitemap non mis à jour) : cette page http://magentoexpert.co.uk/tag/crontab/ donne une modification à effectuer dans le fichier cron.php pour corriger le premier bug.
Cette page http://snippi.net/magento-magento-cron-schedule-monitior fournit un code (à adapter) pour surveiller l’état des tâches cron.
En ce qui me concerne je n’ai toujours pas résolu le pb du sitemap non mis à jour par le cron et mes tâches sont toutes en état « pending »…
affaire à suivre
Merci pour vos articles…

Avatar

Frédéric Martinez

septembre 30th, 2009 à 16 h 05 min

Merci beaucoup de cette précision sur cette mise à jour de CRON. Je vais modifier l’article au passage.

Avatar

Matthieu

octobre 22nd, 2010 à 2 h 40 min

Bonjour Frederic,

Comment vérifier que le cron est bien passé ?

Merci d’avance, et merci pour votre superbe documentation sur Magento.

Avatar

ang

décembre 2nd, 2010 à 22 h 15 min

trés bon tuto, j’ai exactement suivi ce que dit frederic martinez, mais tache cron pour vider les log ne fonctionnent pas.

Avatar

Frédéric Martinez

janvier 4th, 2012 à 21 h 28 min

@Matthieu : Pour être vraiment sûr ?

Mage::log('Log : ok');

dans votre fichier cron.php.

Vous serez sûr que votre fichier a bien été appelé en regardant dans var/log/system.log après le passage du cron.

Note : Activez vos logs dans le back-office

@ang : Avez-vous activé le fait de vider les log (Base de données et non fichier) via le cron ? Ceci se trouve dans : Système > Configuration > Avancé > Système > Nettoyage de logs

Formulaire pour Commenter

Si vous en avez besoin, entourez votre code :

PHP : [php]echo $variable[/php]
XML : [xml]<default></default>[/xml]

Je m'appelle Frédéric Martinez.

Je suis Freelance Magento et anciennement étudiant en Master MIAGE à Toulouse.

Ce site présente mon CV ainsi que mes réalisations professionnelles, personnelles et universitaires.

rss_32 twitter_32 Magento

  • alexandre: Merci, c'est exactement ce dont j'avais besoin ! [...]
  • Frédéric Martinez: De base, non ce n'est pas possible. Cependant, cela doit se jouer dans les configurations JS de cal [...]
  • Peter: le tuto est génial, il est tres utile pour les débutants comme moi. Mais j'ai une petite que [...]
  • Frédéric Martinez: @martin : Non cela ne marche pas avec un Magento 1.6.2.0 par exemple car la table sales_order n'exis [...]
  • martin: Bonjour, ce code marche -t-il toujours sur les nouvelles version de magento ? merci [...]