Crontab Reale su Linux per WordPress via CLI ed Evitare Processi Concorrenti

WordPress include un sistema interno di pianificazione chiamato WP-Cron. Questo meccanismo non funziona come un vero demone di sistema. Si attiva solo quando un utente visita una pagina del sito.

Sui siti a basso traffico le attività pianificate falliscono spesso. Al contrario, sui portali ad alto traffico si verificano frequenti esecuzioni ridondanti. Se riscontri problemi con gli articoli programmati, consulta la nostra guida completa su pubblicazione programmata fallita.

Per questo motivo, impostare un crontab reale per WordPress rappresenta la soluzione definitiva. In questo tutorial vedremo come configurarlo da riga di comando Linux, gestendo al contempo i processi concorrenti sovrapposti.

Perché disattivare il cron virtuale di WordPress

I limiti intrinseci di wp-cron.php

Il file wp-cron.php viene invocato a ogni richiesta HTTP in entrata. Il server avvia una connessione separata in background. Questo metodo genera un overhead non trascurabile.

Se il sito riceve centinaia di visite al minuto, partono richieste continue. Se nessuno visita il sito, nessun task viene avviato. La precisione temporale risulta quindi inaffidabile.

Il consumo anomalo di risorse e i processi concorrenti

I processi lunghi come backup o sincronizzazioni possono richiedere molti minuti. Se una nuova visita richiede wp-cron.php, il task riparte in parallelo. Questa condizione porta al sovraccarico di CPU e MySQL.

Il cron di sistema Linux risolve questa criticità strutturale. Delega il controllo dell’orologio al kernel del server anziché alle visite degli utenti.

Disabilitare WP-Cron tramite wp-config.php

Modificare il file di configurazione

Il primo passo consiste nell’inibire l’esecuzione automatica ad ogni caricamento pagina. Apri il terminale SSH del tuo server Linux. Raggiungi la directory radice dell’installazione di WordPress.

Modifica il file wp-config.php utilizzando il tuo editor preferito, come nano o vim:

nano wp-config.php

Inserisci la seguente direttiva prima della riga che interrompe le modifiche utente:

define('DISABLE_WP_CRON', true);

Salva il file e chiudi l’editor. Ora WordPress ignorerà completamente le visite HTTP per la gestione dei task.

Verificare la corretta disattivazione

Puoi testare la modifica aprendo una pagina qualsiasi del tuo sito. Monitora i log di accesso di Nginx o Apache. Non vedrai più chiamate interne verso wp-cron.php generate dal web server.

Le code dei task rimarranno in sospeso nel database. Sarà compito del sistema operativo eseguirle periodicamente.

Configurare un crontab reale per WordPress via CLI

Accesso SSH e sintassi del comando crontab

Configurare un crontab reale per WordPress elimina del tutto la dipendenza dalle visite degli utenti. Accedi al server con l’utente di sistema proprietario del sito (es. www-data o l’utente cPanel).

Esegui il comando per modificare la tabella dei cron del tuo utente:

crontab -e

Se richiesto, seleziona il tuo editor di testo preferito. Le righe del crontab seguono lo schema temporale a cinque campi: minuto, ora, giorno, mese, giorno della settimana.

Eseguire wp-cron tramite WP-CLI o cURL

Esistono due approcci principali per eseguire il cron di WordPress da terminale. Il primo metodo sfrutta cURL per simulare una chiamata HTTP locale diretta:

*/10 * * * * curl -s -L https://tuosito.it/wp-cron.php?doing_wp_cron > /dev/null 2>&1

Il secondo metodo, molto più efficiente e raccomandato, utilizza lo strumento WP-CLI. Esegue il codice direttamente tramite l’interprete PHP da CLI senza passare dal web server:

*/10 * * * * cd /var/www/html && wp cron event run --due-now > /dev/null 2>&1

Questo comando elabora solo i task effettivamente scaduti. Consuma meno risorse di rete e non occupa slot di connessione HTTP.

Evitare processi concorrenti e sovrapposti con flock

Il pericolo dei task bloccati in background

Quando gestisci un crontab reale per WordPress, i processi pesanti possono entrare in collisione. Se un backup o un invio massivo di newsletter dura quindici minuti, il cron successivo si avvia dopo dieci minuti.

I due processi identici gireranno in parallelo. Questo comportamento può provocare race condition, deadlock nel database e crash della memoria.

Implementare flock nel crontab Linux

Per impedire sovrapposizioni si usa l’utility di sistema flock. Flock crea un file di blocco esclusivo (lockfile). Se il file è già bloccato da un’istanza precedente, la nuova esecuzione termina immediatamente senza danni.

Ecco la sintassi corretta da inserire nel crontab:

*/10 * * * * /usr/bin/flock -n /tmp/wp_cron.lock /usr/local/bin/wp --path=/var/www/html cron event run --due-now > /dev/null 2>&1

Analizziamo i parametri chiave di questa riga:

  • /usr/bin/flock: indica il percorso assoluto del binario di locking.
  • -n: modalità non bloccante; esce subito se il file è occupato.
  • /tmp/wp_cron.lock: percorso del file temporaneo di sincronizzazione.
  • wp –path=…: comando WP-CLI con il percorso assoluto dell’installazione.

Trucco di sicurezza: Definisci sempre i percorsi assoluti nel crontab per evitare errori di ambiente PATH. Usa percorsi assoluti sia per i binari di PHP e WP-CLI, sia per il lockfile.

Monitoraggio e diagnostica del cron da terminale

Controllare i log di sistema e l’output

Per verificare se flock sta saltando esecuzioni o se WP-CLI genera errori, rimuovi temporaneamente il redirect a /dev/null. Indirizza l’output verso un file di log dedicato:

*/10 * * * * /usr/bin/flock -n /tmp/wp_cron.lock /usr/local/bin/wp --path=/var/www/html cron event run --due-now >> /var/log/wp-cron-custom.log 2>&1

Esamina il file generato tramite il comando tail per osservare l’attività:

tail -f /var/log/wp-cron-custom.log

Debug rapido con WP-CLI cron event list

WP-CLI offre comandi potenti per ispezionare la coda degli eventi pianificati. Entra nella cartella del sito ed esegui:

wp cron event list

Il comando mostra l’elenco dei singoli task, l’orario di esecuzione e la ricorrenza. Puoi anche forzare l’esecuzione di un singolo hook specifico:

wp cron event run wp_version_check

Una gestione meticolosa di un crontab reale per WordPress previene sovraccarichi della memoria RAM e del database.

Domande frequenti su crontab e processi WordPress

Ogni quanti minuti conviene pianificare il cron di sistema?

La frequenza ideale varia da 5 a 15 minuti. Per la maggior parte dei blog, 10 o 15 minuti rappresentano il compromesso perfetto tra reattività e risparmio di risorse. Su e-commerce molto trafficati puoi scendere a 2 o 3 minuti.

Cosa succede se il file wp_cron.lock non viene eliminato?

Flock gestisce i file di lock a livello di descrittore di file del kernel Linux. Non appena il processo padre termina (o crasha), il kernel rilascia automaticamente il blocco. Non rimarranno file lock orfani a bloccare le esecuzioni future.

Posso usare questo metodo su hosting condiviso senza accesso root?

Sì, a condizione di avere accesso SSH o un pannello di controllo come cPanel. Spesso cPanel permette di inserire comandi cron con flock o wget personalizzati senza privilegi amministrativi elevati.

Articoli simili