Backup via FTP usando Crontab

Avere un server linux è sempre stato uno dei miei sogni. Avere un php nativo, .htaccess, permessi alle cartelle con un clic, aggiornamenti via SSH una figata pazzesca. Purtroppo però il mio collega ha sempre programmato in ASP e quindi non era possibile abbandonare Windows (ASP non gira su linux perchè è un linguaggio proprietario di Microsoft), ma ora che “comando” io e ormai ho un po’ di esperienza con PHP, ho deciso di affiancare al nostro windows 2008r2, un server dedicato Centos, così da poter approfondire sia Linux che SSH e tutte le conseguenze.

Register.it ci ha fatto un’offerta e abbiamo preso una bella macchinetta, con tanto di WMH e cPanel.

Però l’esperienza mi ha insegnato che nessun Server, nessuna Server Farm, nessuna Pen Drive è affidabile al 100%; ma finchè si tratta delle foto della comunione di tua cugina, puoi limitarti ad imprecare, ma se si tratta del sito ecommerce di un tuo cliente, beh, bestemmiare serve a poco.

Quello che mi piace a me è avere sempre una copia dei file su una macchina mia, da poter “toccare” ed eventualmente recuperare senza troppi sbattimenti e crisi isteriche. Se con Windows puoi schedulare un backup, lo puoi fare anche con linux.

Esistono almeno 450000 metodi differenti, io ho scelto questo:

  • compressione della cartella
  • invio via FTP su un altro server (meglio se proprio o su un altro provider)
  • cancellazione dei file più vecchi

ogni due giorni

Il backup dei file

tutto si sviluppa tramite la possibilità, sul server, di creare un file batch che esegua diverse operazioni a cascata, richiamabile tramite cron. quindi, tramite cPanel, vado nella gestione dei file e creo un file nella home, io l’ho chiamato “backup-aculine.sh“, un nome vale l’altro, e sempre da lì dentro, modifico il file con tasto destro “edit”.

Nel file scriverò:

#!/bin/bash
DATE=$(date +%d-%m-%Y)
BACKUP_DIR="/home/aculine/aculine-backup"

mkdir -p $BACKUP_DIR/$DATE

# take each website backup in separate name, use below format.
tar -zcvpf $BACKUP_DIR/$DATE/theme-$DATE.tar.gz /home/aculine/public_html/wp-content/
# Delete files older than 10 days
find $BACKUP_DIR/* -mtime +10 -exec rm {} \;
#!/bin/sh
USERNAME="xxxxx"
PASSWORD="xxxxx"
SERVER="xxxx"

cd $BACKUP_DIR/$DATE/

# local directory to pickup *.tar.gz file
FILE="wp-content-$DATE.tar.gz"

# remote server directory to upload backup
#BACKUPDIR="/"

# login to remote server
ftp -n -i $SERVER <<EOF
user $USERNAME $PASSWORD
#cd $BACKUPDIR
mput $FILE
quit
EOF

Lo spiego leggermente:

alla riga 2) imposto una variabile che contenga la data odierna

alla riga 3) imposto una variabile con il percorso dove salvare i backup creati

alla riga 5) creo la cartella principale e la sua sottocartella che si chiamerà con la data della riga 2

alla riga 8) comprimo il contenuto di /home/aculine/public_html/wp-content (in questo caso è un wordpress e mi serve solo questa cartella)

alla riga 10) cancello i file più vecchi di 10 giorni

— il backup è creato nella cartella, ora passo a caricarlo via FTP —

alle righe 12/13/14 creo le variabili con le credenziali per il collegamento via FTP

alla riga 16) apro la cartella locale dove c’è il backup creato

alla riga 19) imposto una variabile con il nome del backup che devo trasferire

alla riga 22) imposto una cartella nel server remoto (in questo caso è disattivata perchè mi collego già alla cartella corretta)

dalla riga 25) trasferisco il file e chiudo il tutto.

 

Cron

la programmazione del lancio di questo script è semplice, basta lanciarlo ogni due giorni.

Schermata 2016-02-29 alle 09.34.10

 

 

 

Come al solito questo post è scritto sostanzialmente per me, ma visto che ci ho messo un po’ a trovare quali erano i corretti parametri e a far funzionare il tutto, volevo condividerlo. So che ci sono metodi più “linuxiani” e puliti, ma oh, funziona anche questo. ;)

 

 

 

 


Pubblicato

in

da

Tag: