Menu
Backup e Ripristino

Come automatizzare i backup di WordPress con cron job

Gianluca Gentile · · 6 min di lettura

Come automatizzare i backup di WordPress con cron job

I plugin di backup sono comodi ma non sono l’unica opzione. Se vuoi un sistema di backup indipendente da WordPress, che funzioni anche quando il sito è down o il plugin ha un problema, i cron job del server sono la soluzione più affidabile. Un backup a livello server non dipende dal funzionamento di WordPress, non carica il sito durante la creazione e può essere personalizzato in ogni dettaglio. In questa guida ti mostro come configurare backup automatici di WordPress usando i cron job del server.

Perché usare cron job invece di un plugin

I plugin di backup come UpdraftPlus o BlogVault funzionano bene nella maggior parte dei casi. Ma hanno alcuni limiti intrinseci:

  • Dipendono da WordPress: se WordPress non funziona (errore fatale, database corrotto, sito hackerato), il plugin di backup non può eseguire il backup proprio quando ne avresti più bisogno.
  • Caricano il server: i plugin eseguono il backup durante le visite o tramite WP-Cron, che si attiva solo quando qualcuno visita il sito. Su siti con poco traffico, i backup possono saltare o ritardare.
  • Consumano risorse PHP: la creazione di un archivio ZIP di un sito grande può causare timeout PHP o errori di memoria, soprattutto su hosting condivisi con limiti restrittivi.

Un cron job del server supera tutti questi limiti: viene eseguito dal sistema operativo, funziona indipendentemente da WordPress e non ha limiti di memoria o tempo PHP.

Cos’è un cron job

Un cron job è un’attività programmata che il sistema operativo Linux esegue automaticamente a intervalli regolari. Puoi programmare qualsiasi comando — uno script di backup, una pulizia dei file temporanei, un’ottimizzazione del database — per essere eseguito a un’ora specifica, ogni giorno, ogni settimana o con qualsiasi altra frequenza.

La sintassi di un cron job è composta da cinque campi che definiscono quando eseguire il comando: minuto, ora, giorno del mese, mese e giorno della settimana. Per esempio, 0 3 * * * significa “ogni giorno alle 3:00 di notte”.

Backup del database con mysqldump

Il backup del database è il componente più critico: contiene tutti i contenuti, le impostazioni e i dati degli utenti. Il comando mysqldump crea un dump SQL completo del database:

mysqldump -u utente_db -p'password_db' nome_database | gzip > /backup/db-$(date +%Y%m%d).sql.gz

Questo comando esporta l’intero database, lo comprime con gzip e salva il file con la data nel nome (es. db-20260218.sql.gz). La compressione riduce tipicamente le dimensioni del 90%: un database da 100MB diventa un file da 10MB.

Per evitare di esporre la password nel comando, crea un file .my.cnf nella home dell’utente con i permessi 600:

[mysqldump]
user=utente_db
password=password_db

Con questo file, puoi usare mysqldump senza specificare utente e password nel comando, eliminando il rischio che le credenziali appaiano nella lista dei processi o nei log.

Backup dei file con tar

Il backup dei file include tutto ciò che non è nel database: il core di WordPress, i temi, i plugin, le immagini caricate e i file di configurazione. Il comando tar crea un archivio compresso:

tar -czf /backup/files-$(date +%Y%m%d).tar.gz -C /var/www/html/ .

Per siti di grandi dimensioni, puoi escludere le directory che non servono nel backup (perché scaricabili o rigenerabili):

tar -czf /backup/files-$(date +%Y%m%d).tar.gz 
    --exclude='wp-content/cache' 
    --exclude='wp-content/debug.log' 
    --exclude='wp-content/upgrade' 
    -C /var/www/html/ .

Le esclusioni tipiche sono: la cartella cache (rigenerabile), i file di log (non necessari per il ripristino), la cartella upgrade (file temporanei degli aggiornamenti) e eventuali backup creati da plugin nella cartella wp-content.

Creare uno script di backup completo

Combinando il backup del database e dei file in un unico script bash, puoi automatizzare l’intero processo. Crea il file /usr/local/bin/wp-backup.sh:

#!/bin/bash
BACKUP_DIR="/backup/wordpress"
WP_DIR="/var/www/html"
DATE=$(date +%Y%m%d_%H%M)
DB_NAME="nome_database"

# Crea directory backup
mkdir -p "$BACKUP_DIR"

# Backup database
mysqldump "$DB_NAME" | gzip > "$BACKUP_DIR/db-$DATE.sql.gz"

# Backup file
tar -czf "$BACKUP_DIR/files-$DATE.tar.gz" 
    --exclude='wp-content/cache' 
    -C "$WP_DIR" .

# Elimina backup più vecchi di 14 giorni
find "$BACKUP_DIR" -name "*.gz" -mtime +14 -delete

echo "Backup completato: $DATE"

Rendi lo script eseguibile con chmod +x /usr/local/bin/wp-backup.sh. L’ultima riga dello script è fondamentale: elimina automaticamente i backup più vecchi di 14 giorni, evitando che lo spazio disco si esaurisca.

Programmare il cron job

Per programmare l’esecuzione automatica dello script, apri il crontab con crontab -e e aggiungi una riga. Le programmazioni più comuni:

  • Backup giornaliero alle 3:00: 0 3 * * * /usr/local/bin/wp-backup.sh
  • Backup solo del database ogni 6 ore: 0 */6 * * * mysqldump nome_db | gzip > /backup/db-$(date +%Y%m%d_%H).sql.gz
  • Backup settimanale completo la domenica alle 2:00: 0 2 * * 0 /usr/local/bin/wp-backup.sh

Su pannelli hosting come Plesk, puoi creare cron job dall’interfaccia grafica senza dover modificare il crontab manualmente: vai su Strumenti e impostazioni → Attività programmate (o nella sezione del dominio) e aggiungi una nuova attività.

Inviare i backup su cloud

Un backup sullo stesso server del sito è meglio di niente, ma non ti protegge dal guasto del server, dal ransomware o dall’errore del provider. La regola d’oro è avere almeno una copia fuori dal server.

Puoi aggiungere allo script il caricamento automatico su servizi cloud:

  • Amazon S3: usando AWS CLI (aws s3 cp file.gz s3://bucket/), affidabile e economico per l’archiviazione.
  • Google Drive: usando rclone, uno strumento da riga di comando che supporta decine di servizi cloud.
  • SFTP/SCP: copia su un secondo server con scp file.gz user@server:/backup/ o rsync per trasferimenti incrementali.

rclone è particolarmente versatile: si configura una volta e permette di copiare file su Google Drive, Dropbox, S3, Backblaze B2 e molti altri servizi con un singolo comando. Aggiungilo allo script di backup per automatizzare il trasferimento.

Configurare notifiche di errore

Un backup automatico è inutile se fallisce silenziosamente per settimane. Aggiungi una notifica email allo script per essere avvisato in caso di errore. Cron invia automaticamente l’output dei job via email se configurato con la variabile MAILTO:

MAILTO="tuaemail@dominio.it"
0 3 * * * /usr/local/bin/wp-backup.sh 2>&1

Con questa configurazione, riceverai un’email ogni volta che lo script produce output (inclusi eventuali errori). Per ricevere email solo in caso di errore, modifica lo script per uscire con codice di errore appropriato e redirect dell’output standard a /dev/null.

Hai bisogno di aiuto con i backup?

Configurare un sistema di backup affidabile a livello server richiede accesso SSH e competenze di amministrazione Linux. Se non ti senti sicuro a configurare cron job e script bash, o se vuoi un sistema di backup professionale configurato e testato, il team di SoccorsoWP può implementare una strategia di backup completa per il tuo sito, con archiviazione cloud e notifiche di errore. Apri un ticket e proteggi il tuo sito con backup affidabili.

Condividi:

Lascia un commento