Johannes Hilden har skrivit följande praktisk guide om hur du använder cronjobb för att automatisera händelser i Magento. Tack Johannes!
Magento har en intern cron-mekanism som håller reda på diverse jobb som utförs med jämna intervall av systemet, bl.a. att skicka ut nyhetsbrev och importera växelkurser för olika valutor. Från MagentoCommerce:
A few features in Magento require a script to be run periodically. These features include, but are not limited to: catalog price rules, sending newsletters, generating Google Maps, customer alerts/notifications (product price change, product back to stock), automatic updating of currency rates, and scheduled DB logs cleanup.
Om man exempelvis tittar i app/code/core/Mage/CatalogIndex/etc/config.xml så ser man:
<crontab>
<jobs>
<catalogindex_reindex_all>
<schedule><cron_expr>0 2 * * *</cron_expr></schedule>
<run><model>catalogindex/observer::reindexAll</model></run>
</catalogindex_reindex_all>
<catalogindex_run_queued>
<schedule><cron_expr>* * * * *</cron_expr></schedule>
<run><model>catalogindex/observer::runQueuedIndexing</model></run>
</catalogindex_run_queued>
</jobs>
</crontab>
För att detta ska fungera krävs också att cron-scriptet (cron.php) först anropas av servern. Ett kommando kan lämpligen köras var femte minut för att anropa Magentos interna cron. Enklaste sättet att göra detta är att logga in på sin server via SSH, ange kommandot crontab -e och lägga till följande rad:
0-59/5 * * * * /usr/bin/php /path-to-magento/cron.php
Ersätt /usr/bin/php med sökvägen till din php executable. Du kan hitta denna genom att ange “locate php” eller genom att använda funktionen phpinfo. För att inspektera sin crontab kan man sedan använda kommandot crontab -l.
Har du installerat Magento på ett webbhotell kan det vara knepigare att använda sig av cronjobb då vissa kör PHP4 på sina SSH-servar. Att anropa cron-scriptet via php fungerar således inte (Magento kräver PHP5). En lösning är att istället använda wget:
0-59/5 * * * * wget --delete-after http://{dittdomän}/cron.php
Eftersom wget är ett kommando för att ladda hem en fil så kommer en fil också skapas för varje anrop. Om man anropar scriptet var femte minut blir det en hel del filer, därför är det lämpligt att ange --delete-after som raderar dessa filer automatiskt.
På MagentoConnect finns det mer information om hur du använder cronjobb tillsammans med Magento.
