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 soubory – konfigurač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“