Backupscript für meinen Webserver

Published on 2018-06-04 by Malte

Für meinen Websever nutze ich ein kleines Backupscript was ich euch hier mal zeigen möchte. Da ich meinen Server bei Servercow habe, bekomme ich kostenlos 150GB einer Sambafreigabe zur Verfügung gestellt, wo ich meine Backups auslagere.

Hier mal das Script

#!/bin/bash

date=$(date +%Y%m%H%M)

cd /opt/serverBackup/

###
# delete all files older than 10 days
###

delete_files() {
    find /backups/KS1/* -mtime +10 -exec rm {} \;
    return 0
}

###
# Backup important files
###
do_backup() {
    tar -cvzf tmp/gitRepoBackup.tar.gz /srv/git/
    tar -cvzf tmp/sitesBackup.tar.gz /var/www/html/
    tar -cvzf tmp/etcBackup.tar.gz /etc/

    ###
    # do prosody backup
    ###

    /usr/sbin/service prosody stop
    tar -cvzf tmp/prosodyBackup.tar.gz /var/lib/prosody/
    /usr/sbin/service prosody start
    
    ###
    # Create main archive
    ###

    tar -cvzf /backups/KS1/KS1-Backup-$date.tar.gz tmp/*

    ###
    # Remove all old files
    ###
    rm -rf tmp/*

    return 0
}
###
# Mail admin about backupsystem
###

report() {
    [ "$1" = "ok" ] && /usr/sbin/ssmtp -t < mail/mail.eml
    [ "$1" != "ok" ] && echo $1 >> mail/errmail.eml && /usr/sbin/ssmtp -t < mail/errmail.eml
    return 0
}

###
# do backup
###

delete_files && do_backup && report ok || report err
  1. Löschen aller Backups älter als 10 Tage
  2. Dann tar ich alle Dateien aus den wichtigen Ordner in einem tmp Ordner
  3. Dann werden die einzelnen tars in einem Gesamtarchiv zusammen gefasst
  4. Wenn alles gut war eine Mail als Erfolgsmeldung an mich
  5. Wenn nicht Fehlermeldung an mich

Ordnerstruktur

mkdir -p backup/{tmp,mail}

In dem Ordner mail, sind zwei Dateien enthalten:

cat errmail.eml

From: KS1 Server < root@example.org >
To: info@example.org
Subject: !!! BACKUP ERROR !!!
MIME-Version: 1.0

cat mail.eml

From: KS1 Server < root@example.org >
To: info@example.org
Subject: Server Backup Done
MIME-Version: 1.0

The backup system has done his work.
All files have successfully backuped

Das Script direkt in den Backup Ordnerlegen. Dann noch ein kleiner Cronjob:

 0 */4 * * * /bin/bash /opt/backup/backup.sh

Jetzt wird alle 4 Stunden ein Backup gemacht.