I am a linux newbie and I dont have any knowledge on scripting but this is my urgent requirement. I am suppose to write a backup script for 2 of my servers, could someone help me out please. below is my requirement
Mail Server 1 : 10.0.0.1 Mail Server 2 : 10.0.0.2 Backup Server : 192.0.0.1
Mail Server 1 & 2 must take daily backups of /var and /etc and store them locally.
These backups must be moved to Backup Server on daily basis, once the above local backup is done.
Mail Server 1 & 2 must store backups for 7 days and later remove them.
Backup Server must store backup for 3 months and later remove them.
Files must be stored in tar.gz format.
I need the script in such a way that I can add directorys in future.
Once the backup is performed, need to send a confirmation mail that its been completed successfully to admin@xyz.com
Also I would like to know what are the important directories we should consider backing up in a mail server. Can you please give me inputs on backup procedures.
as I mention earlier, I dont have any knowledge on scripting and I understand that its a mandatory that a linux admin must be aware of any 1 scripting lang. I have started learning the basics of shell scripting just couple of days back.
For taking internal backups, I came up with 2 scripts
#!/bin/sh
# What to backup.
backup_files="/tmp"
# Where to backup to.
dest="/backup"
# Create archive filename.
day=$(date +%A)
hostname=$(hostname -s)
archive_file="$hostname-$day.tgz"
# Print start status message.
echo "Backing up $backup_files to $dest/$archive_file"
date
echo
# Backup the files using tar.
tar czf $dest/$archive_file $backup_files
# Print end status message.
echo
echo "Backup finished"
date
# Long listing of files in $dest to check file sizes.
ls -lh $dest
Since its an urgent task and I am suppose to complete my task in next 2 days, I dont have much time to learn it and write, Can you please help me out this time, so that I will start learning them perfectly from scratch. I am just starting with the book "Learning the bash Shell: Unix Shell Programming... by Cameron Newham" please do advice if there are any other good book for beginners (who dont have programming knowledge earlier).
My suggestion is get the flow of the script down first, without thinking too much about the programming language. Eg.
for each directory to be backed up
create an archive of that directory
if successful
copy the archive to the backup server
remove all but the last 7 backups
send a mail to the admin
else
send the error to the admin
On the backup server
find all backups older than 3 months and remove them
Then, create small parts of the script task by task, eg. create the loop you need, then how to remove all but the last 7 backups, how to copy it to the backup server, ... You won't need much syntax for a script like this, and you should do with these commands: man find (Linux), man scp (Linux), man tar (Linux), man mailx (Linux).
And 2 days left isn't all that much time, so either you've been slacking off, pretended that you know shell scripting during the interview, or your boss doesn't know what kind of effort really is needed.
(p.s. I never pretended stating I knew scripting and even my boss new that I am not aware of it but he wants me to learn and do things and so he gave me 3 days of time, if not he must have forced me to do it imdtly werein I would have been fired by now )
I'm very new to Linux, but here are two I made that might give you some ideas. The first is the Backup script I use for MYSQL, and the script below it cleans up old backups. It is the first script I wrote myself. I should really update them since I have leaned so much since then on what is wrong with these, but they have worked flawlessly for me.
I hope they might help.
#!/bin/bash
#Backup Script for a Server
#
# First Create 2 folders "/usr/local/bin/backup/" and
# "/usr/local/bin/tar"
#
NOWDATE=NAME OF ARCHIVE-`date +%d%m%y`.tgz
BACKUPDIR=/usr/local/bin/backup/
BACKUPTAR=/usr/local/bin/tar
MOUNTLOC=//X.X.X.X/path/to/mount/
USERNAME=username=xxx
PASSWORD=password=xxx
# This tells MYSQL to dump all of it's databases to the $BACKUPDIR
# directory.
mysqldump -u xxxxx -pxxxxxx --all-databases > $BACKUPDIR/xxxx.sql
#This copies all files/directories to the BACKUPDIR.
cp -r /whatever/you/want /usr/local/bin/backup
#This uses tar with compression to put it all in one file.
tar pcfz $BACKUPTAR/$NOWDATE $BACKUPDIR
#This mounts the SAN drive.
mount -t smbfs $MOUNTLOC /mnt -o $USERNAME,$PASSWORD
#This copies the contents of the BACKUP tar files to the SAN.
cp $BACKUPTAR/* /mnt
#This emails a log of what was backed up.
ls -trlh /mnt | tail -1 | mail -s "Server Backup Results" someguy@domain.com
#This unmounts the mounted SAN drive.
umount /mnt
#This removes all files from the BACKUPDIR.
rm -rf $BACKUPDIR/*
#This removes all files from the BACKUPTAR
rm $BACKUPTAR/*
exit 0
-------------------------------------------
To clean up the destination directory I use this:
#!/bin/bash
# Script to tidy up Backups older than 2 days after they went to tape.
MOUNTDIR=//X.X.X.X/Path/to/Backup/Dir
EMAIL=someguy@domain.com
USERNAME=username=xxx
PASSWORD=password=xxx
#This mounts the S drive folder.
mount -t smbfs $MOUNTDIR /mnt -o $USERNAME,$PASSWORD
#Find files older than 2 days.
find /mnt -mtime +1 | mail -s "Backups Deleted" $EMAIL
# This command finds and deletes files older than 2 days and emails me.
find /mnt -mtime +1 -exec rm -f {} \;
#This unmounts the mounted S drive.
umount /mnt