Mihai Surdeanu

Un simplu script pentru backup automatizat

În martie, am scris un articol despre o soluție de backup prin object storage, folosind MinIO. Astăzi, vom continua acel articol prin prezentarea unui script prin care puteți automatiza partea de backup, astfel încât să nu mai fie nevoie să faceți acest lucru manual.

Lucrurile manuale nu sunt recomandate, pentru că de obicei consumă timp și este posibil să uitați la un moment dat să mai faceți acești pași. Cu alte cuvinte, este posibil să uitați să faceți backup-ul pentru mai multe zile și în momentul în care aveți nevoie de un backup, să îi resimțiți lipsa.

Scriptul pe care-l voi prezenta astăzi este scris în bash și este destul de simplu de înțeles, dacă aveți câteva cunoștiințe basic despre bash scripting. Să nu mai pierdem timpul. Iată scriptul:

#!/bin/bash

DIRECTORY_TO_BE_COMPRESSED=$1
DATE_NOW=`date +"%Y-%m-%d"`
ARCHIVE_NAME="/home/minio/backup_${DATE_NOW}.tar.gz."
tar cvzf - "$DIRECTORY_TO_BE_COMPRESSED" | split -b 1024m - "$ARCHIVE_NAME"
for BACKUP_FILE in "${ARCHIVE_NAME}*"; do
        echo $BACKUP_FILE
        ./mc cp $BACKUP_FILE minio/backups
        rm -rf $BACKUP_FILE
done

Pentru a folosi scriptul de mai sus, mai întâi va trebui să creeăm un bucket:

./mc mb minio/backups

După ce am creat bucketul, va trebui să alegem directorul pe care vrem să-l salvăm în Amazon S3. În cadrul scriptului de mai sus, acesta este oferit ca și argument al scriptului nostru – DIRECTORY_TO_BE_COMPRESSED. Folosind comanda tar, vom arhiva directorul și nu vom permite arhive mai mari de 1GB = 1024 MB. De exemplu, dacă arhiva finală ar avea 3.5 GB, o vom împărți în 4 arhive mai mici de maxim 1 GB fiecare. Bineînțeles că ultima va avea doar 0.5 GB. Acest split este benefic pentru a evita limitările în ceea ce privește filesize-ul unui fișier pe care-l puteți urca în cloud.

Mergând mai departe, avem în script și o instrucțiune repetitivă, prin intermediul căreia vom lua fiecare fișier generat și îl vom urca în cloud. După ce urcăm fișierul, folosim o simplă comandă de rm (remove) pentru a șterge arhiva de backup. Partea de cleanup este foarte importantă pentru a evita folosirea spațiului de pe serverul dvs. complet aiurea.

Cum vom apela scriptul? Cam așa:

./backup.sh /home/account/domains/domeniulmeu.ro

Dar mai e ceva. Încă nu am automatizat nimic. Altfel spus, trebuie să rulăm acest script manual, din linia de comandă. Cum facem să îi rulăm zilnic, fără nicio interacțiune umană? Simplu. Folosim un cronjob. Dacă VPS-ul dvs. rulează Ubuntu, pentru a seta un cronjob, va trebui să editați fișierul unde sunt acestea definite:

crontab -e

Aici vom adăuga o nouă linie:

0 0 * * * /bin/bash /home/account/backup.sh /home/account/domains/domeniulmeu.ro >> /home/account/backup.log 2>&1

Mai departe vom salva fișierul. Ultimul pas va consta în restartarea serviciului cron pentru ca modificările făcute de noi să fie luate în calcul:

service cron restart

Spor la backup!

Mihai

Pasionat de IT. Pasionat de viață. Pasionat de tot ceea ce înseamnă a face o viață mai bună, plină de înțelegere, ajutor reciproc și iubire de aproape.

Adaugă comentariu

Arhive

Arhiva personală