In questa guida vi riporto uno script che esegue il backup dei file contenuti in una determinata cartella e mantiene una retention (uno storico) di 30 giorni, andando ad eliminare i backup più vecchi.
Lo script comprimerà il dato per impattare il meno possibile sullo spazio utilizzato.
Di seguito vi riporto lo script, bisogna editare i percorsi indicati in DESTINATION e SOURCEFOLDER senza inserire la / inziale, quindi nel nostro caso il percorso /home/user/test2 diventerà home/user/test2:
#!/bin/bash
BACKUPTIME=`date +%b-%d-%y-%H-%m`
#Aquisizione data e ora
DESTINATION=home/user/test2/backup-$BACKUPTIME.tar.gz
#Destinazione del Backup
SOURCEFOLDER=home/user/test1
#Cartella di cui eseguire il Backup
tar -cpzf $DESTINATION $SOURCEFOLDER
#Comando che esegue il Backup
find $DESTINATION -type f -mtime +30 -exec rm -f {} \; #Rimozione vecchi Backup
Salvare il codice dello scritp in un file .sh (es: backup.sh ) e renderlo eseguibile:
chmod +x backup.sh
Per automatizzare il tutto si può utilizzare crontab lanciando il comando:
crontab -e
selezionare l’editor (consiglio NANO)
Per pianificare la schedulazione, crontab ragiona nel seguente formato:
minute(0-59) hour(0-23) day(1-31) month(1-12) weekday(0-6) command
Quindi ipotizzando che vogliamo schedulare il backup tutti i gironi alle 00:30, dovremo utilizzare la seguente riga :
29 0 * * * /usr/bin/backup.sh
29 sono i minuti e viene interpretato come alle ore X e 30 minuti
0 sono le ore, e viene interpretato come alle ore 24
il primo * indica tutti i giorni, il secondo tutti i mesi ed il terzo tutte le settimane.
In fine /usr/bin/backup.sh indica lo script e dove è situato. Nel nostro esempio si trova nella cartella bin.
Salviamo ed usciamo, crontab ci indicherà che è stata aggiunta una nuova schedulazione.
Vi invito prima di creare il task, di testare lo script su cartelle che contengono file di test così da correggere eventuali errori ed assicurarvi che tutto funzioni correttamente.