Categorie
Blog

Creare uno script cron con Magento

Tra tutte le attività di programmazione ci sono quelli che devono essere ripetute ad intervalli regolari. Una di queste può essere l’invio di email o newsletter, la pulizia dei log, la generazoine di sitemap e molto altro.
Come si fa in Magento a creare uno script che esegue ripetutamente (ad intervalli regolari) una funziona php?

Come in tutti i sistemi unix la risposta è CRON.
Cron è un programma che permette di eseguire ad intervalli regolari altri programmi, ma passiamo immediatamente al nostro magento.
Per prima cosa è necessario creare un modulo con la seguente configurazione:

[sourcecode language=”xml”]
<?xml version="1.0"?>
<config>
<modules>
<IacopoPecchi_Varie>
<version>0.1.0</version>
</IacopoPecchi_Varie>
</modules>
<global>
<models>
<varie>
<class>IacopoPecchi_Varie_Model</class>
</varie>
</models>
</global>
<crontab>
<jobs>
<buoni_send>
<schedule>
<cron_expr>* * * * *</cron_expr>
</schedule>
<run>
<model>varie/observer::funzioneDaRchiamare</model>
</run>
</buoni_send>
</jobs>
</crontab>
</config>
[/sourcecode]

Come vedere non c’è nulla di particolare se non le impostazoini del model e quelle del cron.
Particolare importanza va data alla riga
[sourcecode language=”xml”]
<cron_expr>* * * * *</cron_expr>
[/sourcecode]
che sta ad indicare la frequenza con la quale richiamare lo script php, o meglio la funzione funzioneDaRchiamare

Gli asterischi hanno un valore posizionale e rispettivamente significano secondi, ore, giorni, settimane, mesi ed anni. Questa tabella presa da wikipedia spiega meglio come impostare il periodo:

Entry Description Equivalent To
@yearly (or @annually) Run once a year, midnight, Jan. 1st 0 0 1 1 *
@monthly Run once a month, midnight, first of month 0 0 1 * *
@weekly Run once a week, midnight on Sunday 0 0 * * 0
@daily Run once a day, midnight 0 0 * * *
@hourly Run once an hour, beginning of hour 0 * * * *
@reboot Run at startup

Fatto questo sara necessario solamente creare il file Observer.php all’interno della directory Model del nostro modulo con il seguente contenuto:
[sourcecode language=”php”]
<?php
class IacopoPecchi_Varie_Model_Observer
{

public function funzioneDaRchiamare()
{
Mage::log("ciao");
}

}
?>
[/sourcecode]

Magento in questo modo è predisposto per eseguire script ad intervalli di tempo previssati. L’ultima cosa da fare è quella di richiamare il file /path_to_magento/cron.php ad intervalli regolari (tanto frenquenti quanto quelli impostati nel modulo) per fare comunicare il cron di magento con il cron di sistema linux.
Per i dettagli su come inserire uno script cron nei sistemi unix/linux potete leggere qua su wikipedia: Crontab