Simple bash backup-tool
script·@takagi·
0.000 HBDSimple bash backup-tool
If you only need a simple solution for backups using bash, you can handle it also in an easy way with encryption. Feel free to apply any modifications you like or rebuild it to whatever you want ;) ```bash #!/bin/bash RCPT_KEY=YOUR_KEY_HERE MAIL=YOUR_MAIL_HERE mount -a sleep 10 hosts_to_do=$(cat /etc/offsite_backup/vhosts.list) for line in $hosts_to_do ; do DATE=`date +%Y-%m-%d` mkdir -p /var/offsite_backup_pre/backup_vhosts/$line/$DATE mkdir -p /var/offsite_backup/backup_vhosts/$line/ # I use a file to define if my vhost has got a database DB=$(grep ^$line /etc/offsite_backup/dbconfig | awk '{print $2}') # If encryption is wanted for that vhost, it can be defined in that file ENC=$(grep ^$line /etc/offsite_backup/want_enc | awk '{print $2}') # copy content to remote system or locally rsync -avzH /var/www/$line/ /var/offsite_backup_pre/backup_vhosts/$line/$DATE/ 2>&1 # check if DFB exists if [ "$DB" != "" ]; then mkdir -p /var/offsite_backup_pre/backup_vhosts/$line/$DATE/DATABASE_BAK mysqldump $DB > /var/offsite_backup_pre/backup_vhosts/$line/$DATE/DATABASE_BAK/$DB.sql else echo "no DB found" fi # compress files tar -czf /var/offsite_backup_pre/backup_vhosts/$line/$DATE.tar /var/offsite_backup_pre/backup_vhosts/$line/$DATE >/dev/null 2>&1 # encrypt files if it is wanted if [ "$ENC" = "true" ]; then gpg --encrypt -a --recipient $RCPT_KEY /var/offsite_backup_pre/backup_vhosts/$line/$DATE.tar rm -rf /var/offsite_backup_pre/backup_vhosts/$line/$DATE.tar echo "$line [enc]" >> /tmp/backuplist else echo "$line" >> /tmp/backuplist fi # remove the pre-folder created during backup rm -rf /var/offsite_backup_pre/backup_vhosts/$line/$DATE/ done # move files to final location for line in $hosts_to_do ; do mv /var/offsite_backup_pre/backup_vhosts/$line/* /var/offsite_backup/backup_vhosts/$line/ done # cleanup rm -rf /var/offsite_backup_pre DONE_BACKUPS=$(cat /tmp/backuplist) # send status and clean status file echo -e "Backups done for \n$DONE_BACKUPS" | mail -s "Backup finished" $MAIL rm /tmp/backuplist ``` Additionally you normally want to remove old backups in different cycles. Here is also a way to do so ```bash #!/bin/bash MAIL=YOUR_MAIL_HERE retention=$(grep "" /etc/offsite_backup/vhosts_retention.list | awk '{print $1}') for line in $retention ; do if [[ $line != \#* ]]; then TIME=$(grep ^$line /etc/offsite_backup/vhosts_retention.list | awk '{print $2}') find /var/offsite_backup/backup_vhosts/$line/* -mtime +$TIME -exec rm {} \; fi done echo -e "Following retention file has been issued\n$retention" | mail -s "Old backups removed" $MAIL exit 0 ```