Dziś inaczej niż zwykle, zamiast dłuższego tekstu będzie krótki o tym jak w prosty sposób można napisać skrypt do backup’owania plików i folderów w bashu. Skrypt stworzyłem związku z ‘pracą domową’ jaką mi zadano na laboratoriach z linuxa na mych studiach. Skrypt jest na GPLu, więc korzystać z niego może każdy pod warunkiem, że zostanę o tym poinformowany. Można też go przerabiać do woli ale też o tym trzeba informować mnie.
Skrypt jest prosty szybki i nie wymaga szczegółowej i dogłębnej wiedzy basha. Zacznijmy od postawy: umieszczamy wpis informujący że chcemy uruchomić skrypt:
——————–
#!/bin/bash
——————–
Następnie możemy umieścić kilka komentarzy związanych ze skryptem, np drobne informacje co robi skrypt i kto napisał program. Kolejnym krokiem jest napisanie zmiennych odpowiedzialnych za informowanie skryptu gdzie chcemy i co chcemy backup’ować.
1. Zmienna OUTPUT informuje skrypt o tym gdzie ma być plik z backup’em zapisywany oraz w jakiej formie (w tym przypadku będzie to archiwum tgz):
——————–
OUTPUT=/ścieżka_do_folderu/backup/backup_$(date +%Y%m%d).tgz
——————–
2. Zmienna BUDIR domyślnie wskazuje co ma być backup’owane, ale w tym przypadku jest to dodatkowy wiersz poleceń który czyta ścieżki z pliku tekstowego paths.txt znajdującego w wybranej przez nas lokalizacji:
——————–
BUDIR=`cat /ścieżka_do_folderu/paths.txt | grep -Ev "^#|^$"`
——————–
Plik tekstowy może wyglądać tak:
——————–
/home
/etc/acpi
/etc/samba
/usr/share/openbox
——————–
To jakie ścieżki znajdą się w tym pliku zależy już tylko od tego co chcecie backup’ować.
3. Zmienna DATEOLD odpowiada za sprawdzanie czy nie ma wcześniejszych backup’ów w naszej lokalizacji:
——————–
DATEOLD=/ścieżka_do_folderu/backup/backup_$(date -d '7 day ago' +%Y%m%d).tgz
——————–
4. Zmienna LOGFILE odpowiada za tworzenie pliku z logiem skryptu. Możemy w nim przeczytać co zostało backup’owane i w przypadku błędu, co źle poszło:
——————–
LOGFILE=/ścieżka_do_folderu/backup/backup.log
——————–
5. Ostatnia potrzebna nam zmienna to DATE. Dzięki niej w skrypt zapisuje datę dnia w którym backup został wykonany:
——————–
DATE=$(date +%Y-%m-%d)
——————–
Teraz przejdźmy do wykonywania skryptu. Najpierw informujemy użytkownika, że skrypt ruszył w konkretnym dniu oraz wysyłamy tą informację do pliku logującego.
——————–
echo "Starting backup script on $DATE"
echo -e "\n\nStarting backup script on $DATE\n" >> $LOGFILE
——————–
Następnie skrypt sprawdza czy istnieje backup z przed 7 dni. Jeśli tak stary plik zostanie usunięty. Sprawdzenie odbywa się za pomocą prostego programu ‘test’, który jest w więksozści podstatowowych dystrybucji linuxa. Oczywiście wszystkie informacje o procesie są zapisywane do logfile:
——————–
if test -e $DATEOLD ; then
rm -rf $DATEOLD
echo "Backup from $DATEOLD Removed." >> $LOGFILE
else
echo "No Backup for $DATEOLD exists. Continuing..." >> $LOGFILE
fi
——————–
Teraz najważniejsze. Skrypt taruje wskazane przez zmienną $BUDIR pliki o foldery do lokalizacji określonej przez zmienną $OUTPUT:
——————–
echo "Starting backup of directory $BUDIR to file $OUTPUT" >> $LOGFILE
tar -cZf $OUTPUT $BUDIR
——————–
Dodajemy do programu także fragment informujący nas czy backup się powiódł:
——————–
if [ $? == 0 ]; then
echo "The file:" >> $LOGFILE
echo $OUTPUT>> $LOGFILE
echo "was created as a backup for directiories:" >> $LOGFILE
echo $BUDIR >> $LOGFILE
echo "Done! Backup file succesfully created!"
echo "You can find all information about bacup in $LOGFILE"
——————–
oraz za pomocą polecenia ‘else’ fragment informujący nas w przypadku niepowodzenia:
——————–
else
echo "There was a problem creating:" >> $LOGFILE
echo $OUTPUT >> $LOGFILE
echo "as a backup for directories:" >> $LOGFILE
echo $BUDIR >> $LOGFILE
echo "Error! I can't create backup file!"
echo "You can find all information about bacup in $LOGFILE"
Oczywiście wyświetla nam się tylko prosta informacja o tym, a szczegółowa jest zapisywana w pliku logującym. Skrypt kończymy prostym:
fi
——————–
Koniec. Program wstawiony jakiego cron’a labo innego managera czasu który będziemy mogli odpalać automatycznie co 7 dni. Oczywiście edytując w prosty sposób linijki skryptu możemy zmienić ten czas.
Na koniec wrzucam cały skrypt z moim ścieżkami:
——————–
#!/bin/bash
#BackUp bash script ver 1.0 created by Piotr Pertyński.
#Script backups everything from directories given in specified text file checking firstly if
#there exist earlier file from week ago. It use tar command to create *.tgz file.
#This script is under GPL. If you want to use it contact with me via email: ppertynski@gmail.com
OUTPUT=/home/phase/backup/backup_$(date +%Y%m%d).tgz
BUDIR=`cat /home/phase/backup/paths.txt | grep -Ev "^#|^$"`
DATEOLD=/home/phase/backup/backup_$(date -d '7 day ago' +%Y%m%d).tgz
LOGFILE=/home/phase/backup/backup.log
DATE=$(date +%Y-%m-%d)
echo "Starting backup script on $DATE"
echo -e "\n\nStarting backup script on $DATE\n" >> $LOGFILE
if test -e $DATEOLD ; then
rm -rf $DATEOLD
echo "Backup from $DATEOLD Removed." >> $LOGFILE
else
echo "No Backup for $DATEOLD exists. Continuing..." >> $LOGFILE
fi
echo "Starting backup of directory $BUDIR to file $OUTPUT" >> $LOGFILE
tar -cZf $OUTPUT $BUDIR
if [ $? == 0 ]; then
echo "The file:" >> $LOGFILE
echo $OUTPUT>> $LOGFILE
echo "was created as a backup for directiories:" >> $LOGFILE
echo $BUDIR >> $LOGFILE
echo "Done! Backup file succesfully created!"
echo "You can find all information about bacup in $LOGFILE"
else
echo "There was a problem creating:" >> $LOGFILE
echo $OUTPUT >> $LOGFILE
echo "as a backup for directories:" >> $LOGFILE
echo $BUDIR >> $LOGFILE
echo "Error! I can't create backup file!"
echo "You can find all information about bacup in $LOGFILE"
fi
——————–
Have fun
Najnowsze komentarze