backup | server backup email

Server Backup Email


Create a backup script (given below).

sudo nano /usr/local/bin/backup

Make it executable:

sudo chmod 755 /usr/local/bin/backup

To run:

ssh username@server.xyz -t '/usr/local/bin/backup'

scp username@server.xyz:backup*.7z /mnt/newton/yedek/websites

Or use sshpass:

sshpass -p password ssh username@server.xyz -t '/usr/local/bin/backup'

sshpass -p password scp username@server.xyz:backup*.7z /mnt/newton/yedek/websites

sshpass -p password ssh username@server.xyz -t 'rm /home/username/backup*'

email from server:

mail -A /home/username/backup*.7z -s backup_$(date +"%Y_%m_%d") myemail@gmail.com <<< 'Backup'



#!/bin/bash

USERNAME=abdullah
NEEDED_COMMANDS="smartctl"
PATH="$PATH:/usr/bin:/usr/sbin"
DISKS="/dev/sda"

# Checking if all needed programs are available on system
for COMMAND in $NEEDED_COMMANDS
do
  if ! hash "$COMMAND" > /dev/null 2>&1
  then
    echo "$COMMAND not found on system" 1>&2
    exit 1
  fi
done

FLAG=1

mkdir /home/${USERNAME}/backup_$(date +"%Y_%m_%d") || FLAG=0

if [ -a /home/${USERNAME}/backup_$(date +"%Y_%m_%d") ]
then 
    echo
else
    echo 
    exit 1
fi

echo
echo "------------------------------------------------------------------------------"
echo

cd /home/${USERNAME}/backup_$(date +"%Y_%m_%d") || FLAG=0

echo "Copying files ..."
echo 

# Checking disks
for DISK in $DISKS
do
  smartctl -Hi $DISK > ./diskinfo.txt
done

mkdir ./system || FLAG=0
cp /etc/fstab ./system || FLAG=0
cp /etc/hosts ./system || FLAG=0
cp /etc/hosts.allow ./system || FLAG=0
cp /etc/hosts.deny ./system || FLAG=0
cp /etc/default/grub ./system || FLAG=0
cp /home/${USERNAME}/.bashrc ./system/bashrc || FLAG=0


if [ -a /etc/exports ]
then 
    mkdir exports
    cp /etc/exports ./exports || FLAG=0
else 
    echo "/etc/exports does not exist."
    echo 
fi

if [ -a /etc/fail2ban ]
then 
    mkdir fail2ban_filter.d
    cp /etc/fail2ban/filter.d/recidive.conf ./fail2ban_filter.d || FLAG=0
    cp /etc/fail2ban/filter.d/sshd.conf ./fail2ban_filter.d || FLAG=0
    cp /etc/fail2ban/filter.d/nginx-noproxy.conf ./fail2ban_filter.d 
    cp /etc/fail2ban/filter.d/nginx-nohome.conf ./fail2ban_filter.d 
    cp /etc/fail2ban/filter.d/nginx-noscript.conf ./fail2ban_filter.d 
    cp /etc/fail2ban/filter.d/nginx-badbots.conf ./fail2ban_filter.d 
    cp /etc/fail2ban/filter.d/nginx-http-auth.conf ./fail2ban_filter.d || FLAG=0
    cp /etc/fail2ban/jail.local ./fail2ban_jail.local || FLAG=0
else 
    echo "/etc/fail2ban does not exist."
    echo 
fi

if [ -a /etc/nginx ]
then
    mkdir nginx || FLAG=0
    cp /etc/nginx/nginx.conf ./nginx || FLAG=0
    cp -r /etc/nginx/sites-available ./nginx/sites_available || FLAG=0
else 
    echo "/etc/nginx does not exist."
    echo 
fi

if [ -a /etc/postfix ]
then
    mkdir postfix
    cp /etc/postfix/main.cf ./postfix || FLAG=0
else 
    echo "/etc/postfix does not exist."
    echo 
fi

if [ -a /etc/php/7.0/fpm ]
then
    mkdir php || FLAG=0
    cp /etc/php/7.0/fpm/pool.d/www.conf ./php/php5_fpm_pool.d_www.conf || FLAG=0
    cp /etc/php/7.0/fpm/php.ini ./php || FLAG=0
else 
    echo "/etc/php/7.0/fpm does not exist."
    echo 
fi

echo "------------------------------------------------------------------------------"
echo
echo "Compressing files ..."
sleep 2  
7za a -ms=on -mhe=on -y /home/${USERNAME}/backup_$(date +"%Y_%m_%d").7z /home/${USERNAME}/backup_$(date +"%Y_%m_%d") || FLAG=0
echo
echo "------------------------------------------------------------------------------"
echo

echo "Removing temporary files ..."
sleep 1  
rm -fr /home/${USERNAME}/backup_$(date +"%Y_%m_%d") || FLAG=0
chown -R ${USERNAME} /home/${USERNAME}/backup_$(date +"%Y_%m_%d").7z || FLAG=0
echo 

if [[ $FLAG == 1 ]]
then 
    echo "Done. There were no problems."
    echo
    echo "------------------------------------------------------------------------------"
    echo
    exit 0
else 
    echo "Finished but there were some problems!"
    echo
    echo "------------------------------------------------------------------------------"
    echo
    exit 1
fi

make a server-side backup-email script (given below).

sudo nano /usr/local/bin/backupmail

sudo chmod 755 /usr/local/bin/backupmail

sudo ln -sv /usr/local/bin/backupmail /etc/cron.weekly


#!/bin/bash

USERNAME=abdullah
EMAIL=myemail@gmail.com

/usr/local/bin/backup
sleep 4
mail -A /home/${USERNAME}/backup*.7z -s backup_$(date +"%Y_%m_%d") $EMAIL <<< 'Backup'
sleep 4
rm /home/${USERNAME}/backup*.7z
exit