FTP automation on Linux

Posted: 8th November 2012 by Babar Shafiq in System Administration
Tags: , , , , , ,

 

Ever wanted FTP backups and automation for keeping backups of important file on off-peak time. I always love automation, so machines can do things automatically and help humans 🙂

Ok lets start, create a shell script

vim autoftp

Now paste this script and adjust the parameters of ftp host, email address, backup directory, folder to backup.

ftphost= IP_Address
EMAIL=me@my.com
DIRTOBACKUP=/var/www/html
BACKUPDIR=/home/backup
LOGFILE=$BACKUPDIR/autoftp.log

hostname=`hostname`
file=$hostname-backup-`date +%Y-%m-%d-%H-%M`.tgz
time=`date +%Y-%m-%d-%H:%M:%S`
cd $BACKUPDIR
echo "###################################################"> $LOGFILE
echo "# Start Date&Time $time       #">> $LOGFILE
echo "###################################################">> $LOGFILE
echo "#              Backup Process Started             #">> $LOGFILE
echo "###################################################">> $LOGFILE
echo [$time] $file created >> $LOGFILE
tar cpzf $file $DIRTOBACKUP
time=`date +%Y-%m-%d-%H:%M:%S`
echo [$time] backup compressed now sending to ftp server >> $LOGFILE

ftp -v << EOF
open $ftphost
binary
put $file
quit
EOF
#if your mail client is not setup, you can skip, email backup reports, by commenting it with hash sign #
mail -s "Backup Report" $EMAIL < $LOGFILE

Save the file in any place you like, in this example I am saving it to my home directory, i.e. /home/bshafiq/autoftp
Give execute permission to newly created shell script by doing this:

chmod +X autoftp

For providing FTP authentication details, “.netrc” text file with ip userid password details in user root folder
like this:-

vim ~/.netrc

and paste details like this:-
machine IP_Address login Your_UserID password Your_Super_Strong_Password

Final step add to crontab

crontab -e -u root

(Change root with anyother user of your choice, but the user must have access to the folders we want to backup and where we put the backup)

0 1 * * * /home/bshafiq/autoftp > /dev/null

(It will auto backup on 1am daily, adjust the time as your want)

Check the crontab is ok?

crontab -l -u root

Make sure crontab service is running

service crontab status

That’s it ! Enjoy auto ftp backups 🙂