web-dev-qa-db-fra.com

Comment configurer une tâche cron dans le module Magento?

Je voulais configurer un travail cron dans mon module. J'ai suivi les instructions du wiki Magento - how_to_setup_a_cron_job , mais mon travail cron ne s'exécute tout simplement pas.

Ceci est mon config.xml (app/code/local/Roomstory/Facture/etc/config.xml)

<?xml version="1.0"?>
<config>    
    <modules>
        <Roomstory_Invoice>
            <version>0.1.1</version>
        </Roomstory_Invoice>
    </modules>
<!-- -->
    <crontab>
        <jobs>
            <roomstoryinvoice_setstatus>
                <schedule><cron_expr>*/10 * * * *</cron_expr></schedule>
                <run><model>roomstory_invoice/setstatus::run</model></run>
            </roomstoryinvoice_setstatus>
        </jobs>
    </crontab>
</config>

Et c'est ma classe. (app/code/local/Roomstory/Invoice/Model/Setstatus.php)

<?php
class Roomstory_Invoice_Model_Setstatus {

  public function run() {
    return true;
  }

}
?>

J'ai installé un module Cron Scheduler, qui affiche mon travail cron dans la liste, mais lorsque j'essaie de "lancer le programme", (erreur)

Rappel non valide: roomstory_invoice/setstatus :: run n'existe pas

Ce quelque chose de simple, après beaucoup d'essais, je ne suis toujours pas en mesure de trouver l'erreur. Veuillez indiquer un autre moyen de le faire ou indiquer l’erreur dans ce code.

Merci!

17
Vinayak Garg

Dans vos modules config.xml, mettez ce qui suit:

<config>
    <global>
        <models>
            <roomstoryinvoicecron>
                <class>Roomstory_Invoice_Model</class>
            </roomstoryinvoicecron>                         
        </models>
    </global>
    <crontab>
        <jobs>
            <roomstoryinvoicecron>
                <schedule>
                    <cron_expr>*/10 * * * *</cron_expr>
                </schedule>
                <run>
                    <model>roomstoryinvoicecron/observer::setStatus</model>
                </run>
            </roomstoryinvoicecron>
        </jobs>
    </crontab>
</config>

Dans app/code/local/Roomstory/Invoice/Model/Observer.php, ajoutez ce qui suit:

<?php
class Roomstory_Invoice_Model_Observer {
    public function setStatus() {
        Mage::log("WORKS!");
    }
}

Assurez-vous que la journalisation est activée et que cela devrait fonctionner, vérifiez le journal pour en être sûr;)

34
Kenny

Assurez-vous d’ajouter le fichier crento.sh de Magento dans crontab 

crontab -e

*/5 * * * * /bin/sh /path-to-magento/cron.sh
8
Lance Badger
 <crontab>
        <jobs>
            <CompanyName_ModuleName>
                <schedule>
                    <cron_expr>*/5 * * * *</cron_expr>
                </schedule>
                <run>
                    <model>ModuleName/observer::setStatus</model>
                </run>
            </CompanyName_ModuleName>
        </jobs>
    </crontab>

et créez le fichier Observer.php dans Model avec

    class CompanyName_ModuleName_Model_Observer extends Mage_Core_Model_Abstract
{

   public function setStatus()
   { 

   }
}
2
Naresh Tank

Vous pouvez facilement créer un module pour le travail cron en suivant simplement les étapes suivantes:

Créez un fichier Config.xml et définissez-y le travail cron.

<?xml version="1.0"?>
<config>    
<crontab>
        <jobs>
            <Namespace_Module>
                <schedule>
                    <cron_expr>* * * * *</cron_expr>
                </schedule>
                <run>
                    <model>module/observer::method</model>
                </run>
            </Namespace_Module>
        </jobs>
    </crontab>
</config>

Votre méthode d'observateur:

  class CompanyName_ModuleName_Model_Observer extends Mage_Core_Model_Abstract
{

   public function setStatus()
   { 
//your action
   }
}

maintenant, dernière étape, allez dans votre cpanel d’hébergement et définissez le chemin et l’heure d’exécution du fichier cron.php dans la section cron job

par défaut, vous pouvez définir un chemin tel que php -f /home/mercodec/public_html/cron.php dans magento.

1
Deepak Mankotia

avant cela, vous devez exécuter ce script sur votre terminal . Pour Ubuntu: */1 * * * */usr/bin/php /var/www/html/modulename/cron.php>/dev/null

0
Jeeva Chezhiyan