Pravidelná archivace www složky webů a jiných adresářů na Ubuntu

V předešlém příspěvku Ubuntu a záloha MySQL jsme si ukázali, jak si zazálohovat MySQL databázi. Tentokrát se podíváme na soubory webů a případně jiné složky, které potřebujeme mít uložené pro případné nehody. Skript bude jen lehce upravený, kdy namísto databází bude procházet složky.

Opět si vytvoříme dva souborykonfigurační a skript. V příkladu oba vložím opět do „/etc/_scripts“.

Soubor konfigurace si pojmenuje např.: files.cnf
touch files.cnf
vi files.cnf

Do obsahu souboru vložíme pole cest, které chceme ukládat:
FOLDERS=("/etc/_scripts" "/etc/backupme")

Vytvoříme sh skript:
touch backup-files.sh
vi backup-files .sh

Obsah backup-files .sh:

#!/bin/bash
#----------------------------------------
# OPTIONS
#----------------------------------------
BACKUP_PATH="/mnt/backup/files" # Kam budeme zalohovat
DATE=$(date -I) # Aktualni datum pro jmeno souboru
DAYS_TO_KEEP=31    # Jak dlouho budeme ponechavat soubory - 0 pro zachovani vsech
CONFIG='/etc/_scripts/files.cnf' # Cesta ke konfig souboru
WWW_FOLDER='/var/www' #Cesta k www adresari s weby
#----------------------------------------

# Vytvoreni backup adresare, pokud neexistuje
if [ ! -d $BACKUP_PATH ]; then
  mkdir -p $BACKUP_PATH
fi

# Nacteni kofiguracniho souboru
source $CONFIG

for dir in "${FOLDERS[@]}"  # Projdeme pole s cestou k adresari
do 
    # Vytahneme z cesty nazev adresare
    basename="$(basename $dir)" 
    echo "Backing up $i to $BACKUP_PATH/$DATE-$basename.tgz" 
    date
    echo

    # Archivace adresare  - nazev souboru bude datum + nazev adresare
    tar czf $BACKUP_PATH/$DATE-$basename.tgz $dir    
done 

# Zalohu slozek mame hotovou
echo
echo "Backup of custom folders finished"

# Zaloha www adresáře
find $WWW_FOLDER -maxdepth 1 -type d -print0 | #Projdeme vsechny adresare ve slozce www
  while IFS= read -rd '' dir; 
  do 
    # Vytahneme z cesty nazev adresare
    basename="$(basename $dir)" 
    if [ "$basename" == 'www' ] # Chceme zalohovat jen podadresare slozky www, ne slozku samotnou
        then
            continue     
    fi

    echo "Backing up $dir to $BACKUP_PATH/$DATE-$basename.tgz" 
    date
    echo

    tar czf $BACKUP_PATH/$DATE-$basename.tgz $dir  # Archivace adresare  - nazev souboru bude datum + nazev adresare  
  done

echo
echo "Backup of www folders finished"

# Smazání starých záloh
if [ "$DAYS_TO_KEEP" -gt 0 ] ; then
  echo "Deleting backups older than $DAYS_TO_KEEP days"
  find $BACKUP_PATH/* -mtime +$DAYS_TO_KEEP -exec rm {} \;
fi

V souboru můžeme upravit nastavení:
DAYS_TO_KEEP – Jak dlouho budeme držet zálohy po dnech
BACKUP_PATH – Do kterého adresáře zálohovat
CONFIG – Cesta ke konfiguračnímu souboru
WWW_FOLDER – Cesta k www – adresářům webů

Uložíme a nastavíme práva po spouštění souboru:
chmod +x backup-files.sh

Nastavíme cron:
crontab -e

Jako poslední řádek vložíme čas a cesty pro soubor a log:
0 23 * * * sudo /etc/_scripts/backup-files.sh >> /var/log/backup-files.sh.log 2>&1

Skript se spustí ve 23:00 a logovat bude do „/var/log/backup-files.sh.log