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.

12 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

Avatar

Claude

juin 28th, 2014 à 23 h 37 min

hello,

J’ai bien suivi vos conseils et ca ne marche pas, malheureusement.
En fait, j’étais sur ovh avant, mais ai du passer sur soyoustart (donc tj OVH, mais un peu en moins bien…)

Voila le message d’erreur
/bin/sh: /usr/local/bin/php5: No such file or directory

Apparemment, php5 n’est pas situé la et n’arrive pas à naviguer sur le serveur avec cette m**** de soyoustart…

POurriez-vous m’aider SVP?

Merci par avance,
Claude

Avatar

Frédéric Martinez

juin 30th, 2014 à 10 h 38 min

@Claude : Il faut d’abord que vous localisiez votre fichier PHP, pour cela, tournez-vous vers des forums spécialisés en hébergement, je ne peux vous aider là dessus.

Mais vous pouvez tenter de mettre juste ‘php’ au lieu de ‘/usr/local/bin/php5′, c’est peut-être suffisant.

Avatar

Claude

juillet 2nd, 2014 à 15 h 27 min

@Fred
Malheureusement non, ca ne marche pas en mettant juste php. Ai regardé sur mon serveur, rj’ai bien un fichier php sur usr/bin/ mais ca ne tourne pas correctement.
En plus, SoyouStart (OVH) ne fournissent aucun support et rien sur les forums, c le désert…
Du coup, je ne sais plus ou regarder, mais c une release 3 D’OVH qui est utilisée…

Si jamais quelqu’un avait une idée, ce serait supoer sympa

Avatar

Frédéric Martinez

juillet 2nd, 2014 à 15 h 45 min

@Claude : Changez d’hébergement, ou bien faites infogérer votre hébergement. Cela peut être une solution.

Avatar

Sylvestre

décembre 15th, 2014 à 10 h 36 min

@Claude, il y a plusieurs versions de php installées sur votre serveur SoYouStart (en tout cas pour la release 2 d’ovh, je pense que ce sera la mème chose sur la Rel 3)

/usr/local/php5
/usr/local/php4
/usr/local/php53

Le fichier php a exécuter se trouve dans

/usr/local/php5/bin/ pour php5 …

Ainsi votre commande sera, si votre système utilise php5

/usr/local/php5/bin/php -f …

Cdlt

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, fondateur de l'agence web e-commerce PH2M et anciennement étudiant en Master MIAGE à Toulouse.

Ce site présente mes réalisations professionnelles, personnelles et universitaires.

Magento Certified Developer Plus

rss_32 twitter_32 Magento

  • Vincent MARMIESSE: Bonjour, Attention depuis Magento 1.9.2.0, les blocs CMS sont en cache ! Cela ne pose pas de pro [...]
  • Java2dev: Bonjour, pour l'Etape 1 a quel niveau on met les codes? dans quel folder et c'est un fichier a edit [...]
  • manuel: Bonjour Frédéric, j'aimerais savoir comment enlever l'option de ( signature obligatoire ) de mon m [...]
  • Arsene: Bonjour a tous, j'aimerais savoir comment créer un module qui propose des options d'assurance su [...]
  • Frédéric Martinez: @Thomas : Il y aura toujours de la perte sur les personnes ne retournant pas sur la page de success. [...]