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“