Files
netstack-backuptools-bash/backupfiles_to_nfs.sh
2024-07-15 12:30:27 +02:00

169 lines
5.1 KiB
Bash

#!/bin/bash
#
# BackupNFS Tool 0.2
#
# Programm von Netstack GmbH written by Andreas Pfeiffer
#
# Dieses Programm führt Datei Backups zu einem NFS Share durch
#
################# CONFIG #####################
backupdir="$nfsmountdir/$hostname" # Verzeichniss wo die Backups abgelegt werden, es werden automatisch unterordner "mysql" und "files" erstellt.
datadir=(/path/to/files /path/to/files/2 ) # Welche Ordner sollen gesichert werden
datenbank=(dbname dbnam2) # Datenbanken welche gesichert werden sollen
date1=$(date +%a) # Datumsformat welches an die Dateien angehangen wird
hostname=$(hostname -f) # Hostname
dbuser=DBUSER # Datenbank User
dbpass=DBPASS # Datenbank Passwort
mailsubject="Backup - $hostname" # Mail Betreff
mailtext=/tmp/mailtext.txt # Mailtext zum Versand
email=monitor@example.com # Empfaenger der Status Mails
date2=$(date +%A" "%d.%m.%Y) # Datum für E-Mail
nfsmount="192.168.0.1:/backupshare" # NFS server + mount mount
nfsmountdir=/path/to/backup/ # Ordner fuer NFS-Share
################# CONFIG END #################
# Function to check if NFS packages are installed
check_nfs_packages() {
if ! dpkg -l | grep -q nfs-common; then
echo "NFS packages not installed. Installing..."
sudo apt-get update
sudo apt-get install -y nfs-common
if [ $? -ne 0 ]; then
echo "Failed to install NFS packages. Exiting..."
exit 1
fi
fi
}
# Run the NFS package check function
check_nfs_packages
# Reset Error Variable
error="0"
# Clear mailtext
echo " " > $mailtext
# Aktuelles Datum
echo "#############################################################" >> $mailtext
echo "Backup Script from $hostname - $date2" >> $mailtext
echo "#############################################################" >> $mailtext
echo "" >> $mailtext
# Check Backupdir
if [ ! -d $nfsmountdir ]; then
echo -n "Create Backupdirectory ... " >> $mailtext
mkdir -p $nfsmountdir
if [ ! -d $nfsmountdir ]; then
echo -n "Error - Cant create nfs directory" >> $mailtext
# send mail on Error
cat $mailtext | mail -s "$mailsubject" $email
exit 1
fi
echo -n "done" >> $mailtext
echo "\n" >> $mailtext
fi
# Mount NFS to backupdir
echo -n "mount nfs share $nfsmount ... " >> $mailtext
mount $nfsmount $nfsmountdir
if [ $? -ne 0 ]; then
echo -n " error" >> $mailtext
echo "\n" >> $mailtext
# send mail on Error
cat $mailtext | mail -s "$mailsubject" $email
exit 1
fi
echo -n " done" >> $mailtext
echo "\n" >> $mailtext
# Check Backupdir
if [ ! -d $backupdir ]; then
echo -n "Create Backupdirectory ... " >> $mailtext
mkdir -p $backupdir
if [ ! -d $backupdir ]; then
echo -n "Error - Cant create backupdirectory" >> $mailtext
# send mail on Error
cat $mailtext | mail -s "$mailsubject" $email
exit 1
fi
echo -n "done" >> $mailtext
echo "\n" >> $mailtext
fi
# Check Backupdir for mysql
if [ ! -d $backupdir/mysql ]; then
echo -n "Create Backupdirectory for mysql ... " >> $mailtext
mkdir -p $backupdir/mysql
if [ ! -d $backupdir/mysql ]; then
echo -n "Error - Cant create backupdirectory for mysql" >> $mailtext
# send mail on Error
cat $mailtext | mail -s "$mailsubject" $email
exit 1
fi
echo -n "done" >> $mailtext
echo "\n" >> $mailtext
fi
# Check Backupdir for files
if [ ! -d $backupdir/files ]; then
echo -n "Create Backupdirectory for files ... " >> $mailtext
mkdir -p $backupdir/files
if [ ! -d $backupdir/files ]; then
echo -n "Error - Cant create backupdirectory for files" >> $mailtext
# send mail on Error
cat $mailtext | mail -s "$mailsubject" $email
exit 1
fi
echo -n "done" >> $mailtext
echo "\n" >> $mailtext
fi
######################
# Start Files backup #
######################
# Count datadir's from config
countdir=${#datadir[*]}
for (( j=0; j<$countdir; j++ ))
do
filesdir=${datadir[$j]}
# echo "";
# Make backup from files dir
name=$(basename $filesdir)
echo -n "make backup from $filesdir ..." >> $mailtext
tar -Pczf $backupdir/files/${name}_$date1.tar.gz $filesdir
if [ $? -ne 0 ]; then
echo -n " error" >> $mailtext
echo "\n" >> $mailtext
# send mail on Error
cat $mailtext | mail -s "$mailsubject" $email
exit 1
fi
echo -n " done" >> $mailtext
echo "\n" >> $mailtext
done
# Umount NFS share
umount $nfsmountdir
# Mailversand
check_ssmtp_packages() {
if ! dpkg -l | grep -q msmtp; then
echo "msmtp packages not installed. Installing..."
sudo apt-get update
sudo apt-get install -y msmtp
if [ $? -ne 0 ]; then
echo "Failed to install msmtp packages. Exiting..."
exit 1
fi
fi
}
echo -e "Subject: $mailsubject\n\n$mailtext" | msmtp -t email
exit 0