Come fare il backup con uno script di shell su server Linux

backup con script di shell

Realizzare un backup del proprio sito web è fondamentale ed esistono diverse strade per poterne realizzare anche in automatico, con risultati diversi.

Alcune delle modalità per realizzare un backup su server per i siti web:
  • internamente al proprio sito internet attraverso componenti o plugin
  • internamente al proprio account sul server
  • internamente al proprio server con console ssh

L’ipotesi che andremo a considerare è quella di attivare internamente nel proprio account sul server, una procedura automatica di backup tramite script .sh (simulando la procedura realizzabile internamente al proprio server, ma con console ssh)

Come fare il backup con uno script di shell su server Linux

Pre-requisiti:
  • web server linux
  • accesso a cpanel
  • accesso a Cron Job
  • accesso totale all’account attivo su web server
  • possibilità di eseguire script .sh nell’account
Accesso totale all’account attivo su web server

come possiamo notare in questo screenshot in basso abbiamo accesso completo all’account in cui

  • /public_html contiene tutti i file pubblici quindi i contenuti del sito web o di altre applicazioni web
  • /backup_giornaliero conterrà i file di backup giornalieri
  • /backup_settimanale conterrà i file di backup settimanali
  • /backup_mensile conterrà i file di backup mensili

accesso completo account su server

Nota: a seconda del sistma operativo linux installato la configurazione delle cartelle potrebbe risultare diversa, il principio di base è che si deve avere accesso all’intero account per poter piazzare le cartelle di backup fuori dalla cartella pubblica /public_html o /www o /htdocs

Il nostro obiettivo è quello di creare dei backup della cartella pubblica /public_html e quindi tutto il suo contenuto (siti web o applicazioni web) + un backup dei MySql utilizzati, cercando di ottenere un archivio aggiornato dei backup in cui conserveremo gli ultimi 5 giorni di backup dei file presenti all’interno di /public_html e gli ultimi 5 giorni di dati MySql:

/backup_giornaliero
|–/files
|–backup.sh
|–delete_file.sh

File e cartelle:

  • la cartella /files contiene i backup
  • il file backup.sh contiene lo script che esegue il backup
  • il file delete_files.sh contiene lo script che cancella ogni tot di giorni i file più vecchi

backup script sh

All’interno della cartella /files verranno archiviati i file dei backup compressi come è possibile osservare nella cartella qui in basso

backup script sh

Analizziamo il contenuto del file backup.sh:
Il codice è abbastanza semplice, si dovranno sostituire i parametri indicati con i proprio parametri quindi:

  • tuonome.com
  • nome_database_mysql
  • utente_mysql
  • password_utente_mysql
  • nome_account (nome account del server, utente del server)

Questo script esegue diverse operazioni:

  • la prima riga esegue il backup del mysql e lo invia alla cartella /files
  • la seconda riga esegue il backup della cartella /public_html comprimendo ed inviando il tutto nella cartella /files

E possibile osservare che sono stati prima dichiarati e poi inclusi i parametri per generare la data di esecuzione dei backup, i nomi e la loro collocazione

 

Analizziamo il contenuto del file delete_file.sh:
Questo secondo script si occupa di rimuovere i file più vecchi di un tot periodo all’interno della cartella /files (sarà poi vostra discrezione scegliere quanto tempo mantenere i file)

 

L’ultimo passaggio da compiere è quello di attivare l’esecuzione di questi script, ovvero utilizzeremo Cron jobs per eseguirli:

Accedere al vostro cpanel, all’interno del pannello avanzato trovate Cron jobs che serve ad eseguire operazioni a tempo:

cron jobs cpanel

 

All’interno di Cron:

cron jobs

 

Come da immagine sopra possiamo inserire l’email di riferimento per ricevere le notifiche dell’esecuzione corretta di Cron jobs (io consiglio vivamente di usarla)

Cliccando nel tab Common settings (come nell’immagine sotto) ci vengono fuori le soluzioni più utilizzate per temporizzare le istruzione, impostiamo quindi che cron esegua il nostro file backup.sh ogni giorno

  • Once a day (0 0 * * *)
  • nel box Command inseriremo l’istruzione

Al termine clicchiamo su “Add new Cron Job”, cosi verrà eseguito ogni giorno il file  backup.sh

Ripetiamo la stessa operazione per eseguire il file che andrà a cancellare dall’archivio dei backup i file “più vecchi di ..” (giorni da voi assegnati)

Cliccando nel tab Common settings (come nell’immagine sotto) impostiamo quindi che cron esegua il nostro file backup.sh ogni giorno

  • Once a day (0 0 * * *)
  • nel box Command inseriremo l’istruzione

Al termine clicchiamo su “Add new Cron Job”, cosi verrà eseguito ogni giorno il file  delete_files.sh (che si occuperà di controllare se ci sono file “più vecchi di …”)

common settings cron jobs

Concludendo con questo sistema possiamo eseguire e organizzare direttamente sul web server i nostri archivi di backup decidendo:

  • se eseguire backp giornalieri, settimanali o mensili
  • per quanti giorni, settimane o mesi conservarli
  • eseguire il backup dall’esterno della cartella /public_html
  • conservare i backup all’esterno della cartella /public_html
  • avere backup sempre aggiornati senza dover effettuare il backup del backup (cosa che avviene quando i file di backup restano nella cartella /public_html)

 

  • Luca Vasini

    Buonasera,
    grazie per la guida… io vorrei cancellare i file poco prima di eseguire il nuovo backup, soltanto che il vostro script sh non mi funziona… vi risulta? grazie

    • Raffaele Filannino

      Ciao Luca,

      per sicurezza ho verificato lo script nel file delete_file.sh, quello indicato nella guida funziona, ma prova con questo in basso ho sostituito -mtime com -ctime

      In questo link puoi approfondire le differenze fra -mtime com -ctime
      http://www.linux-faqs.info/general/difference-between-mtime-ctime-and-atime

      #!/bin/sh

      find /home/tspdpoag/backup_giornaliero/files -type f -ctime +3 -exec rm {} ;

      …fammi sapere se funziona. Altrimenti dovrebbe essere qualcosa legata al tempo.