{"id":25871,"date":"2026-08-24T10:00:00","date_gmt":"2026-08-24T08:00:00","guid":{"rendered":"https:\/\/soccorsowp.it\/blog\/?p=25871"},"modified":"2026-08-24T10:00:00","modified_gmt":"2026-08-24T08:00:00","slug":"backup-wordpress-wp-cli-cron-riga-comando","status":"publish","type":"post","link":"https:\/\/soccorsowp.it\/blog\/backup-wordpress-wp-cli-cron-riga-comando\/","title":{"rendered":"Come fare backup di WordPress da riga di comando con WP-CLI e cron"},"content":{"rendered":"<h1>Come fare backup di WordPress da riga di comando con WP-CLI e cron<\/h1>\n<p>I plugin di backup funzionano bene per la maggior parte dei siti, ma hanno limiti: consumano risorse PHP, possono andare in timeout su siti grandi e dipendono dal cron di <a href=\"https:\/\/soccorsowp.it\/blog\/blocco-di-contenuti-opt-in-per-wordpress\/\">WordPress<\/a> che non \u00e8 sempre affidabile. Per un controllo totale sui backup, puoi usare <strong>WP-CLI<\/strong> combinato con <strong>cron job di sistema<\/strong>. In questa guida ti spiego come creare uno script di backup automatico professionale.<\/p>\n<h2>Perch\u00e9 usare WP-CLI per i backup<\/h2>\n<p>WP-CLI esegue i comandi WordPress direttamente dalla riga di comando, senza passare dal web server. Questo offre diversi vantaggi rispetto ai plugin:<\/p>\n<ul>\n<li><strong>Nessun timeout:<\/strong> il processo non \u00e8 limitato dal tempo massimo di esecuzione di PHP configurato nel web server.<\/li>\n<li><strong>Meno risorse:<\/strong> non carica l&#8217;intero stack WordPress per ogni operazione.<\/li>\n<li><strong>Automazione affidabile:<\/strong> il cron di sistema \u00e8 pi\u00f9 affidabile del wp-cron di WordPress.<\/li>\n<li><strong>Scriptabile:<\/strong> puoi combinare il backup con altre operazioni come la compressione, la copia remota e la pulizia dei vecchi backup.<\/li>\n<\/ul>\n<h2>Backup del database con WP-CLI<\/h2>\n<p>Il comando base per esportare il database \u00e8:<\/p>\n<pre>wp db export \/percorso\/backup\/database-$(date +%Y%m%d).sql --path=\/percorso\/wordpress\/<\/pre>\n<p>Questo crea un file SQL con la data nel nome (es. <span style=\"font-family: monospace\">database-20260824.sql<\/span>). Per comprimere il file e risparmiare spazio:<\/p>\n<pre>wp db export - --path=\/percorso\/wordpress\/ | gzip &gt; \/percorso\/backup\/database-$(date +%Y%m%d).sql.gz<\/pre>\n<p>Il trattino dopo <span style=\"font-family: monospace\">export<\/span> dice a WP-CLI di scrivere sullo standard output, che viene poi passato a gzip tramite la pipe. Il risultato \u00e8 un file compresso che occupa il 70-90% di spazio in meno.<\/p>\n<h2>Backup dei file con tar<\/h2>\n<p>Per i file del sito, usa <span style=\"font-family: monospace\">tar<\/span> con compressione gzip:<\/p>\n<pre>tar czf \/percorso\/backup\/files-$(date +%Y%m%d).tar.gz \n    --exclude='wp-content\/cache' \n    --exclude='wp-content\/backup*' \n    --exclude='wp-content\/uploads\/backup*' \n    \/percorso\/wordpress\/<\/pre>\n<p>Le opzioni <span style=\"font-family: monospace\">&#8211;exclude<\/span> escludono le cartelle di cache e i backup precedenti, riducendo le dimensioni dell&#8217;archivio. Puoi aggiungere altre esclusioni per cartelle temporanee o log.<\/p>\n<h2>Creare uno script di backup completo<\/h2>\n<p>Ecco uno script bash che combina il backup del database e dei file:<\/p>\n<pre>#!\/bin\/bash\n# Configurazione\nWP_PATH=\"\/var\/www\/html\/wordpress\"\nBACKUP_DIR=\"\/home\/utente\/backups\"\nDATE=$(date +%Y%m%d-%H%M)\nKEEP_DAYS=30\n\n# Crea la cartella di backup se non esiste\nmkdir -p $BACKUP_DIR\n\n# Backup database\nwp db export - --path=$WP_PATH | gzip &gt; $BACKUP_DIR\/db-$DATE.sql.gz\necho \"Database: OK\"\n\n# Backup file\ntar czf $BACKUP_DIR\/files-$DATE.tar.gz \n    --exclude='wp-content\/cache' \n    --exclude='wp-content\/backup*' \n    $WP_PATH\necho \"File: OK\"\n\n# Elimina backup pi\u00f9 vecchi di 30 giorni\nfind $BACKUP_DIR -name \"db-*.sql.gz\" -mtime +$KEEP_DAYS -delete\nfind $BACKUP_DIR -name \"files-*.tar.gz\" -mtime +$KEEP_DAYS -delete\necho \"Pulizia: OK\"\n\necho \"Backup completato: $DATE\"<\/pre>\n<p>Salva lo script come <span style=\"font-family: monospace\">backup-wp.sh<\/span>, rendilo eseguibile con <span style=\"font-family: monospace\">chmod +x backup-wp.sh<\/span> e testalo manualmente prima di automatizzarlo.<\/p>\n<h2>Automatizzare con cron<\/h2>\n<p>Per eseguire lo script automaticamente ogni giorno alle 3 di notte, aggiungi una riga al crontab:<\/p>\n<pre>crontab -e<\/pre>\n<p>Aggiungi:<\/p>\n<pre>0 3 * * * \/home\/utente\/backup-wp.sh &gt;&gt; \/home\/utente\/backup.log 2&gt;&amp;1<\/pre>\n<p>Il redirect <span style=\"font-family: monospace\">&gt;&gt; backup.log 2&gt;&amp;1<\/span> salva l&#8217;output dello script in un file di log, utile per verificare che tutto funzioni. Controlla il log periodicamente per assicurarti che i backup vengano creati senza errori.<\/p>\n<h2>Copiare i backup su un server remoto<\/h2>\n<p>I backup locali non bastano: se il server ha un problema, perdi sia il sito sia i backup. Aggiungi al tuo script un passaggio per copiare i backup su un server remoto:<\/p>\n<pre># Copia su server remoto con rsync\nrsync -avz $BACKUP_DIR\/ utente@server-remoto:\/backups\/wordpress\/\n\n# Oppure su Amazon S3 con AWS CLI\naws s3 sync $BACKUP_DIR\/ s3:\/\/nome-bucket\/wordpress-backups\/ --delete<\/pre>\n<p>Per rsync, configura l&#8217;autenticazione SSH con chiave pubblica per evitare di dover inserire la password. Per S3, configura le credenziali AWS con <span style=\"font-family: monospace\">aws configure<\/span>.<\/p>\n<h2>Backup incrementali con rsync<\/h2>\n<p>Per siti molto grandi, un backup completo dei file ogni giorno pu\u00f2 essere lento e occupare molto spazio. I <strong>backup incrementali<\/strong> copiano solo i file modificati dall&#8217;ultimo backup:<\/p>\n<pre>rsync -avz --link-dest=$BACKUP_DIR\/latest \n    $WP_PATH\/ $BACKUP_DIR\/backup-$DATE\/\n\n# Aggiorna il link simbolico \"latest\"\nln -snf $BACKUP_DIR\/backup-$DATE $BACKUP_DIR\/latest<\/pre>\n<p>L&#8217;opzione <span style=\"font-family: monospace\">&#8211;link-dest<\/span> crea hard link ai file non modificati invece di copiarli, risparmiando spazio su disco. Ogni cartella di backup sembra completa ma occupa solo lo spazio dei file cambiati.<\/p>\n<h2>Verificare i backup automaticamente<\/h2>\n<p>Aggiungi al tuo script un controllo automatico che verifica l&#8217;integrit\u00e0 del backup:<\/p>\n<pre># Verifica che il file di backup esista e non sia vuoto\nif [ -s \"$BACKUP_DIR\/db-$DATE.sql.gz\" ]; then\n    echo \"Verifica database: OK\"\nelse\n    echo \"ERRORE: backup database vuoto o mancante\"\n    # Invia notifica email\n    echo \"Backup fallito\" | mail -s \"ALERT: <a href=\"https:\/\/soccorsowp.it\/blog\/aggiornare-manualmente-wordpress-guida-pratica-per-un-aggiornamento-sicuro\/\">Backup WordPress<\/a>\" admin@tuodominio.com\nfi<\/pre>\n<p>Puoi anche verificare l&#8217;integrit\u00e0 dell&#8217;archivio gzip con <span style=\"font-family: monospace\">gzip -t<\/span> e dell&#8217;archivio tar con <span style=\"font-family: monospace\">tar tzf<\/span>.<\/p>\n<h2>Serve assistenza?<\/h2>\n<p>Se vuoi configurare un sistema di backup automatico professionale per il tuo sito WordPress, il team di <strong><a href=\"https:\/\/soccorsowp.it\/blog\/i-migliori-plugin-woocommerce-per-dominare-il-black-friday\/\">SoccorsoWP<\/a><\/strong> pu\u00f2 creare uno script personalizzato per le tue esigenze. <a href=\"https:\/\/soccorsowp.it\/ticket\/\">Apri un ticket<\/a> e proteggi i tuoi dati.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Come fare backup di WordPress da riga di comando con WP-CLI e cron I plugin di backup funzionano bene per la maggior parte dei siti,&#8230;<\/p>\n","protected":false},"author":1,"featured_media":25872,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_titles_title":"Come fare backup di WordPress con WP-CLI e cron da riga di","_seopress_titles_desc":"Guida al backup WordPress con WP-CLI e cron job: script completo, backup incrementali, copia remota e verifica automatica dei backup.","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"","_seopress_redirections_param":"","_seopress_redirections_type":0,"_seopress_analysis_target_kw":"","footnotes":""},"categories":[1697],"tags":[],"class_list":["post-25871","post","type-post","status-publish","format-standard","has-post-thumbnail","category-backup-e-ripristino"],"_links":{"self":[{"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/posts\/25871","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/comments?post=25871"}],"version-history":[{"count":0,"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/posts\/25871\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/media\/25872"}],"wp:attachment":[{"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/media?parent=25871"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/categories?post=25871"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/tags?post=25871"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}