Skip to main content

Attività pianificate o Scheduled Tasks, come utilizzarle in Joomla!® 5/6

Pubblicato il: 15 dicembre 2025

Le Attività pianificate, in inglese Scheduled Tasks, sono un prezioso strumento che ci permette di pianificare ad intervalli predefiniti lo svolgersi di operazioni ripetitive utili alla manutenzione del sito, all'invio periodico di report e a tutte quelle operazioni che necessitano di un cron job per schedulare determinate attività.

Le attività pianificate sono state introdotte con Joomla!® 4.1 e nel tempo sono state aggiornate e perfezionate.
Attualmente (qui siamo alla versione 6.0.1 di Joomla!®) dal backend, Sistema --> Attività pianificate possiamo gestirne 11:

  • Attiva offline
  • Attività - Eliminazione dati sessione
  • Controllo Dimensione Immagine
  • Elimina log azione - Attività
  • Imposta sito offline
  • Imposta sito online
  • Notifica di aggiornamento di Joomla!®
  • Richiesta GET
  • Ruota log
  • Sblocco globale
  • Scadenza dei consensi per la privacy
Joomla!® Scheduled Tasks

Di queste, tre sono già attive di default:

  • Notifica di aggiornamento di Joomla!® - "Update Notification", programmata ad intervalli di 24 ore.
    Controlla la disponibilità di nuove versioni di Joomla!® e quando la trova avvisa tramite email.
  • Eliminazione dati sessione - "Session Data Purge", programmata ad intervalli di 24 ore.
    Elimina i dati e i metadati scaduti in base al gestore di sessione impostato in Configurazione globale.
  • Ruota log - "Rotate Logs", programmata ad intervalli di 30 giorni.
    Ruota periodicamente i file di log.

Tutte queste attività, la cui funzione è riassunta nel pannello di attivazione, si basano su plugin nativi ma è possibile aggiungerne altre reperibili su Github o anche crearne di proprie. A questo proposito vi invito a leggere questo interessante articolo di Joomla!® Magazine:
https://magazine.joomla.org/all-issues/november/scheduled-tasks

In questo tutorial prenderemo in considerazione tre attività che, a mio parere, potrebbero essere utili in molti casi:

  • Sblocco globale - Global Check-in
  • Controllo Dimensione Immagine - Image Size Check
  • Elimina log azione - Delete ActionLogs

Sblocco globale - Global Check-in

Molto utile nei siti web quando utenti distratti (...) che non seguono la corretta procedura di salvataggio o di chiusura dopo l'inserimento o la modifica di un contenuto, ne provocano il blocco e la conseguente comparsa del famigerato "lucchetto".

contenuto "bloccato"

Il Task Sblocco Globale ci viene in aiuto per risolvere una volta per tutte questo noioso inconveniente. Sarà sufficiente schedulare il task in modo che ad intervalli regolari (nel mio caso ogni giorno), controlli la presenza di eventuali "lucchetti" e, in caso affermativo procedere con lo sblocco.

Partiamo da: Sistema --> (Gestione) Attività pianificate --> + Nuova --> Sblocco Globale

Sblocco Globale impostazioni 01
Sblocco Globale impostazioni 02

Commentiamo insieme i parametri inseriti:

⎦ Nuova attività ⎣ - Campi di base: ho preferito definire l'intervallo di 1 giorno (al posto di 24 ore) perché in questo modo posso stabilire l'orario UTC di esecuzione (stimato) e programmarlo lontano da altre procedure automatizzate come ad esempio quelle di backup del server.

⎦ Nuova attività ⎣ - Parametri attività: viene definito un tempo minimo che deve trascorrere prima di forzare lo sblocco, a salvaguardia di quelli che in quel momento stanno legittimamente lavorando su un contenuto.

⎦ Avanzate ⎣ - Priorità: da questa tendina è possibile stabilire se questa attività deve avere una priorità rispetto ad altre; scelte possibili: Bassa, Normale, Alta.

⎦ Avanzate ⎣ - Notifiche: di default le notifiche vengono inviate ai Super User solo in caso di problemi: Attività non riuscita, Errori decisivi/blocchi di sistema e Attività orfane. Vi consiglio solo inizialmente di abilitarne l'invio anche per le Attività completate in modo da essere tranquilli che tutto funzioni regolarmente.

Controllo Dimensione Immagine - Image Size Check

Spesso avviene, nonostante le molteplici raccomandazioni, che alcuni utenti carichino nel sito immagini di dimensioni esagerate con conseguente inutile occupazione di spazio e possibile penalizzazione in termini di SEO.
Il Task Controllo Dimensione Immagine elimina questo problema perché a scadenza programmata scansiona le cartelle in Media e, nel caso rilevi immagini di dimensioni superiori a quelle impostate, provvede al loro corretto ridimensionamento.

Partiamo da: Sistema --> (Gestione) Attività pianificate --> + Nuova --> Controllo Dimensione Immagine

Controllo Dimensione Immagine

Commentiamo insieme i parametri inseriti:

⎦ Nuova attività ⎣ - Campi di base: stesse considerazioni fatte sopra per Sblocco Globale.

⎦ Nuova attività ⎣ - Parametri attività: impostiamo la cartella dove eseguire il controllo, le dimensioni (Larghezza o Altezza) massime consentite (in pixel) e il numero massimo di immagini da elaborare in una singola esecuzione (per non rischiare di generare un errore di Timeout).

⎦ Avanzate ⎣ - stesse considerazioni fatte sopra per il Task Sblocco Globale.

larghezza prima del ridimensionamento

larghezza prima del task di ridimensionamento

larghezza dopo il ridimensionamento

larghezza dopo il task di ridimensionamento

Nota: le immagini ridimensionate si sostituiscono a quelle originali (in pratica quelle a dimensione originale vengono perse).

Elimina log azione - Delete ActionLogs

Se dal menù principale andate in Utenti --> Log azioni utenti, vedrete una sfilza di record che riportano in ordine cronologico tutte le azioni che gli utenti hanno svolto nel sito nel corso del tempo. Questi record su un sito aggiornato di frequente, possono diventare migliaia e di conseguenza appesantire il database con dati che probabilmente raggiunta una certa "anzianità", perdono di importanza e potrebbero per questo essere eliminati.
Ecco che ci viene in aiuto il Task Elimina Log Azione che farà proprio questo per noi con parametri di configurazione, anche in questo caso, molto intuitivi.

Partiamo da: Sistema --> (Gestione) Attività pianificate --> + Nuova --> Elimina log azione

task: elimina log azione

Trigger di esecuzione: Pianificatore ad attivazione ritardata e Cron web

Dobbiamo chiarire un punto importante che riguarda il "quando" le nostre attività pianificate vengono di fatto eseguite.
Potrebbe non essere sufficiente definire regole e orari per garantire l'esecuzione delle attività nel momento esatto in cui vorremmo che ciò avvenisse.
Per capire il perché dobbiamo introdurre il concetto di trigger di esecuzione.
Il trigger di esecuzione è il meccanismo che determina quando un’attività pianificata deve essere avviata.
In Joomla!®, il trigger può essere generato dal sistema (quando viene effettuata una richiesta al sito come ad esempio la visualizzazione di una pagina da parte di un utente qualsiasi) oppure da un cron esterno (il cron job del sever) configurato per richiamare lo scheduler. Quando il trigger scatta, Joomla!® controlla le attività pianificate e avvia quelle che soddisfano le condizioni previste (frequenza, stato, prossima esecuzione, ecc.).
Joomla!® ci mette a disposizione due tipologie di trigger, entrambi configurabili dal tasto Opzioni:

  • Pianificatore ad attivazione ritardata
  • Cron web

Pianificatore ad attivazione ritardata

Attivo di default, il trigger scatta quando c'è una visita al sito web, l'utente che apre una pagina.
Ad ogni visita, con un intervallo minimo di 300 secondi (modificabile), Joomla!® verifica se c'è qualche task che deve partire e, in caso affermativo, lo manda in esecuzione.
Nei siti web con poco traffico questo trigger potrebbe non essere il più indicato.
Per fare un esempio, se programmiamo un task alle 8.00 di mattina ma la prima visita al sito l'abbiamo alle 16, quel task verrà eseguito alle 16 del pomeriggio.

pianificatore ad attivazione ritardata

Cron web

Questo trigger è più preciso per quanto riguarda l'orario di esecuzione. Viene attivato da un cron job esterno che andremo ad impostare dal pannello di controllo del nostro server (funzione normalmente compresa nei servizi di hosting).

Disabilitato di default, sarà sufficiente spostare il cursore su Abilitato e Salvare affinché Joomla!® crei il Link Webcron. Questo link andrà prima copiato e successivamente incollato nel cron job del server.
Così facendo potremo schedulare il cron job ad esempio con cadenza oraria o giornaliera e sarà poi Joomla!® a gestire tutte le partenze delle varie attività schedulate.

Quando attiviamo il Cron web, valutiamo se tenere abilitato anche il Pianificatore ad attivazione ritardata.

Cron web da attivare
Cron web attivato

Esempio di cron job "Attività pianificate" impostato nel pannello di controllo di un server, programmato per essere eseguito ogni giorno alle ore 6.00.

Cron job sul server

Tabelle attività e Cronologia esecuzione

tabella attività pianificate

Tabella riepilogativa delle attività pianificate

Questa tabella molto utile riepiloga tutte le attività pianificate e relativi dettagli: tipologia, date di esecuzione e priorità impostata.
Cliccando sul bottone giallo Esegui attività è possibile far partire l'attività manualmente in qualsiasi momento.

tabella cronologia di esecuzione

Cronologia esecuzione

Altra tabella riepilogativa, richiamabile dall'omonimo bottone in alto.
Fondamentale per controllare il corretto svolgersi delle attività nel tempo.
Fate attenzione alla data di ultima esecuzione e al codice di uscita.
Per capire i codici, vedi l'elenco riportato pià avanti.

Codici di uscita - Last Exit Code

Nella tabella visualizzata cliccando sul tasto Cronologia esecuzione è presente una colonna denominata: "Ultimo codice di uscita".
I codici riportati in questa colonna segnalano gli esiti delle ultime esecuzioni di ogni singola attività.

Ci sono 12 diversi codici di uscita che per comodità vi raggruppo nell'elenco sottostante.
Sono presi dal file: .../administrator/components/com_scheduler/src/Task/Status.php

  • 0

    OK - exit code on success

  • 1

    RUNNING - used when the routine just starts. This is not meant to be an exit code

  • 2

    NO_LOCK - used on failure to acquire a pseudo-lock

  • 3

    NO_RUN - used on failure to run the task

  • 4

    NO_RELEASE - used on failure to release lock or update the record

  • 5

    KNOCKOUT - used when a routine is either "knocked out" by an exception or encounters an exception it cannot handle gracefully

  • 123

    WILL_RESUME - used when a task needs to resume

  • 124

    TIMEOUT - used when a task times out

  • 125

    NO_TASK - used when a task does not exist

  • 127

    NO_ROUTINE - used when a routine is missing

  • -1

    NO_EXIT - used when a routine does not return an exit code

  • -2

    INVALID_EXIT - used when a routine returns an invalid (non-integer) exit code