skripting-section:bash:server-backup-skript

Automatisches - Server Backup Skript

Das folgende Skript, wurde erstellt, um wichtige Dateien eines Applikationsservers in regelmässigen Abständen automatisiert zu sichern. Zur Installation, wird das Skript immer jeweils auf das zu sichernde System kopiert und dort wie unten beschrieben eingerichtet.

Vor der Installation, muss sichergestellt werden, dass bereits ein funktionierender NFS-Server (Zur Speicherung des Backups) zur Verfügung steht. Die Server Adresse und die NFS-Freigabe muss anschliessend im Skript angepasst werden.

# vim /root/server_backup_script.sh

[PASTE THE SCRIPT SOURCECODE]

Nun wird das Backupskript zur Ausführung berechtigt und anschliessend im crontab der zu sichernden Maschine eingetragen. In meinem Bespiel, wird hier immer täglich um 12:00 das Skript automatisiert ausgeführt.

# chmod +x /root/server_backup_script.sh

# vim /etc/crontab	

0 12 * * * root /root/server_backup_script.sh


Filename: server_backup_script.sh

#!/bin/bash
################################################################################################
#******************* Backup Linux Server Script by Michael Reber - v 1.2 **********************#
################################################################################################

################################################################################################

## Variable Definition & System Vorbereitungen:
backupdir=`hostname`
today=`date +"%Y-%m-%d"`
OLDBACKUP=`date -d "7 days ago" +"%Y-%m-%d"`

## System dependency Check:
if [ -n "$(command -v apt-get)" ]; then
        if [ $(dpkg-query -W -f='${Status}' nfs-common 2>/dev/null | grep -c "ok installed") -eq 0 ]; then
          apt-get install nfs-common -y;
        fi
else
        if [ $(yum -q list installed nfs-utils &>/dev/null && echo "1" || echo "0") -eq 0 ]; then
          yum install nfs-utils -y;
          systemctl start rpcbind && systemctl enable rpcbind;
        fi
fi
if [ ! -d "/mnt/server-backup" ]; then
        mkdir /mnt/server-backup
fi
################################################################################################
## Mount und bereitstellen des Backupverzeichnises:
mount -t nfs -o rw,hard 192.168.1.21:/volume1/server-backups /mnt/server-backup 2>> /var/log/blackSERV-backup.log

if [ ! -d "/mnt/server-backup/$backupdir" ]; then
        mkdir /mnt/server-backup/$backupdir
        echo "$today - Creating new backupdir: $backupdir for this server.." >> /var/log/blackSERV-backup.log
fi
################################################################################################
## Start des System-Backups:
echo "$today - Starting with backup for server: $backupdir .." >> /var/log/blackSERV-backup.log
mkdir -p /mnt/server-backup/$backupdir/$today/etc
rsync -rlptDv --chmod=Du+rwx \
/etc/fstab /etc/crontab \
/mnt/server-backup/$backupdir/$today/etc/
cat ~/.bash_history | grep -v '#' >> /mnt/server-backup/$backupdir/$today/history.txt

# Backup Webserver Files & content:
if [ -d "/var/www" ]; then
        mkdir /mnt/server-backup/$backupdir/$today/webfiles
        rsync -rlptDv --chmod=Du+rwx \
        /var/www/ \
        /mnt/server-backup/$backupdir/$today/webfiles/
fi

# Backup Webserver Configuration:
if [ -d "/etc/apache2" ]; then
        mkdir /mnt/server-backup/$backupdir/$today/etc/apache2
        rsync -rlptDv --chmod=Du+rwx \
        /etc/apache2/ \
        /mnt/server-backup/$backupdir/$today/etc/apache2/
fi
if [ -d "/etc/httpd" ]; then
        mkdir /mnt/server-backup/$backupdir/$today/etc/httpd
        rsync -rlptDv --chmod=Du+rwx \
        /etc/httpd/ \
        /mnt/server-backup/$backupdir/$today/etc/httpd/
fi

# Backup PLEX spezific Files:
#https://support.plex.tv/articles/201154527-move-viewstate-ratings-from-one-install-to-another/
if [ -d "/var/lib/plexmediaserver" ]; then
        mkdir /mnt/server-backup/$backupdir/$today/PLEX_server_backup
        cp -a  "/var/lib/plexmediaserver/Library/Application Support/Plex Media Server/Plug-in Support/Databases/com.plexapp.plugins.library.db" "/tmp/com.plexapp.plugins.library.db"
        echo ".dump metadata_item_settings" | sqlite3 /tmp/com.plexapp.plugins.library.db | grep -v TABLE | grep -v INDEX > /mnt/server-backup/$backupdir/$today/PLEX_server_backup/watchedState.sql

        rsync -rlptDv --chmod=Du+rwx \
        "/var/lib/plexmediaserver/Library/Application Support/Plex Media Server/Plug-in Support/Databases/" \
        /mnt/server-backup/$backupdir/$today/PLEX_server_backup/Databases/
        rsync -lptDv --chmod=Du+rwx \
        "/var/lib/plexmediaserver/Library/Application Support/Plex Media Server/Preferences.xml" \
        /mnt/server-backup/$backupdir/$today/PLEX_server_backup/Preferences.xml
fi

# Backup der Files von /opt:
if [ -d "/opt" ]; then
        mkdir /mnt/server-backup/$backupdir/$today/opt
        rsync -rlptDv --chmod=Du+rwx --exclude 'eff.org' \
        /opt/ \
        /mnt/server-backup/$backupdir/$today/opt/
fi

#chmod -R 775 /mnt/server-backup/$backupdir/$today/*
# Dump database into SQL file
 #mysqldump --user=$user --password=$password --host=$host $db_name > /mnt/server-backup/$backupdir/$today/$db_name-$today.sql

################################################################################################
## Löschen von 7 Tage alten Backups:
if [ -d "/mnt/server-backup/$backupdir/$OLDBACKUP" ]; then
        rm -Rf /mnt/server-backup/$backupdir/$OLDBACKUP
fi
################################################################################################
##
umount /mnt/server-backup

  • skripting-section/bash/server-backup-skript.txt
  • Last modified: 2019/04/04 16:18
  • by michael