Hai cambiato un prezzo e il catalogo mostra ancora quello vecchio. Hai creato un prodotto e non compare nella categoria. Le email degli ordini partono in ritardo, o non partono. In Magento questi sintomi, che sembrano scollegati, hanno spesso la stessa origine: indici e attività pianificate. Vediamo come funzionano, senza tecnicismi inutili, e come controllare che lavorino.
Cosa sono gli indici
Magento conserva i dati dei prodotti in una struttura molto flessibile: attributi, negozi, lingue, prezzi per gruppo di clienti, regole di catalogo. È potente, ma leggere un prodotto ricomponendo tutti questi pezzi a ogni visita sarebbe lentissimo.
Per questo Magento prepara in anticipo delle tabelle «riassuntive», gli indici: quali prodotti stanno in quale categoria, quale prezzo vale per chi, cosa è disponibile, cosa trova la ricerca. Il catalogo che vedono i clienti viene letto dagli indici, non dai dati originali. Se un indice non viene aggiornato, il negozio mostra informazioni vecchie anche se nel back office è tutto giusto.
Le due modalità: al salvataggio o pianificata
Ogni indice può aggiornarsi in due modi:
| Modalità | Come funziona | Quando va bene |
|---|---|---|
| Al salvataggio | l’indice si aggiorna subito, ogni volta che salvi qualcosa | cataloghi piccoli, poche modifiche |
| Pianificata | Magento annota cosa è cambiato e aggiorna gli indici in seguito, a piccoli gruppi, tramite le attività pianificate | la scelta consigliata per un negozio in produzione |
Con la modalità al salvataggio, su un catalogo grande ogni modifica nel back office diventa lenta, e un’importazione di massa può bloccare tutto. Con la modalità pianificata il back office resta reattivo e gli aggiornamenti arrivano sul catalogo poco dopo. C’è però una condizione: le attività pianificate devono girare.
Lo stato e la modalità degli indici si controllano da riga di comando:
bin/magento indexer:status
bin/magento indexer:show-mode
e per impostare la modalità pianificata su tutti gli indici:
bin/magento indexer:set-mode schedule
Cos’è il cron di Magento
Il cron è il meccanismo che esegue comandi a intervalli regolari. Magento lo usa per moltissime cose:
- aggiornare gli indici in modalità pianificata;
- inviare le email che mette in coda;
- applicare le regole di prezzo del catalogo alle date previste;
- pubblicare contenuti programmati, generare la sitemap, pulire dati vecchi;
- elaborare le code di messaggi usate da varie funzioni e da molte estensioni.
Magento non ha bisogno di un processo che resti sempre acceso: basta che il sistema lanci il suo comando ogni minuto. Ci pensa poi Magento a decidere quali lavori eseguire, in base al proprio calendario interno.
Come si attiva
La documentazione ufficiale descrive il comando che Magento usa per installare da sé le proprie righe di cron per l’utente del negozio. Sui nostri piani puoi anche gestire le attività pianificate dal pannello DirectAdmin, nella sezione dedicata. In ogni caso conta che:
- il comando venga eseguito ogni minuto;
- giri con lo stesso utente del negozio;
- usi la stessa versione di PHP del sito: se la riga di comando usa una versione diversa, il cron può fallire in silenzio.
Per il lavoro da riga di comando serve l’accesso SSH, che da noi è disponibile sulla porta 7530 con una chiave aggiunta dal pannello. Se non sei sicuro che sia configurato bene, apri un ticket: lo verifichiamo con te.
Come capire se il cron funziona
Ecco i segnali più affidabili:
- Gli indici: se
indexer:statusmostra a lungo indici da ricostruire o con molte modifiche in attesa, il cron probabilmente non lavora. - Il back office: Magento mostra un avviso quando qualche indice non è valido. Non ignorarlo.
- Le email: se l’invio asincrono è attivo e le conferme d’ordine non partono, controlla prima il cron.
- Le regole di prezzo: una promozione programmata che non parte all’ora prevista è un altro indizio.
Gli errori più comuni
Cron configurato, ma con la versione sbagliata di PHP
È il caso più frequente dopo un cambio di versione: il sito va con la versione nuova, il cron continua a usare la vecchia, oppure il contrario. Dopo ogni cambio di versione di PHP, ricontrolla il cron.
Reindicizzazioni complete a ripetizione
Ricostruire tutti gli indici da capo (bin/magento indexer:reindex) è un’operazione pesante: va bene dopo un’importazione importante o una migrazione, non come abitudine quotidiana. Se ti accorgi di doverlo fare spesso, il problema è il cron, non gli indici.
Estensioni che appesantiscono il cron
Alcune estensioni aggiungono lavori pianificati molto pesanti (feed per marketplace, sincronizzazioni con gestionali). Se il negozio rallenta sempre agli stessi minuti, il motivo potrebbe essere lì: valuta con lo sviluppatore dell’estensione orari e frequenza.
Cron fermo dopo una migrazione
Le righe di cron fanno parte della configurazione del server, non dei file del negozio: dopo un trasloco vanno ricreate. Quando curiamo noi la migrazione, è uno dei controlli che facciamo prima di spostare i DNS.
In breve
- il catalogo legge dagli indici: indici vecchi significano negozio vecchio;
- in produzione, indici in modalità pianificata;
- il cron deve girare ogni minuto, con lo stesso utente e la stessa versione di PHP del sito;
bin/magento indexer:statusè il primo controllo da fare quando qualcosa «non si aggiorna».
Per una panoramica su tutto ciò che serve a un Magento in salute, dalla modalità produzione a Redis, dai un’occhiata alla pagina dell’hosting Magento o apri un ticket dall’area clienti.