≡ Menu

RHEL / CentOS Linux FTP Cron Job for automatic ftp backup

I need help with a cron job. A automatic ftp backup will pickup sql.tar.gz and upload to remote ftp server under CentOS Linux. How do I automate entire procedure to upload file /tmp/backup/sql.tar.gz?

You can use standard ftp client for File transfer protocol. The program allows a user to transfer files to and from a remote network site. However, modern FTP client follows little different syntax to upload file.

Here is a quick script to upload file:

#!/bin/sh
USERNAME="your-ftp-user-name"
PASSWORD="your-ftp-password"
SERVER="your-ftp.server.com"
 
# local directory to pickup *.tar.gz file
FILE="/tmp/backup"
 
# remote server directory to upload backup
BACKUPDIR="/pro/backup/sql"
 
# login to remote server
ftp -n -i $SERVER <<EOF
user $USERNAME $PASSWORD
cd $BACKUPDIR
mput $FILE/*.tar.gz
quit
EOF

Make sure script has executable permissions:
$ chmod +x /path/to/ftp.backup.script.sh

Setup a cron job to run script at 15:30 (24 hr clock time) times:
30 15 * * * /path/to/ftp.backup.script.sh

Above script should work with all modern ftp client under any Linux / UNIX version.

A shell script to dump all mysql database and upload them via lftp program

Make sure you have lftp client installed:
# yum install lftp

#!/bin/bash
### MySQL Server Login Info ###
MUSER="root"
MPASS="MYSQL-ROOT-PASSWORD"
# mysql server
MHOST="localhost"    
 
### FTP SERVER Login info ###
FTPU="FTP-SERVER-USER-NAME"
FTPP="FTP-SERVER-PASSWORD"
FTPS="FTP-SERVER-IP-ADDRESS"
 
 
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
BAK="/backup/mysql"
GZIP="$(which gzip)"
NOW=$(date +"%d-%m-%Y")
 
[ ! -d $BAK ] && mkdir -p $BAK || /bin/rm -f $BAK/*
 
DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')"
for db in $DBS
do
 FILE=$BAK/$db.$NOW-$(date +"%T").gz
 $MYSQLDUMP -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 > $FILE
done
 
lftp -u $FTPU,$FTPP -e "mkdir /mysql/$NOW;cd /mysql/$NOW; mput /backup/mysql/*; quit" $FTPS

Set a cron job:
# crontab -e
Run mysql backup ftp script everyday at midnight:
@midnight /path/to/mysql.backup.sh >/dev/null 2>&1
Related: Increase productivity with FTP autologin and macros and backup related shell script.

Share this tutorial on:

Your support makes a big difference:
I have a small favor to ask. More people are reading the nixCraft. Many of you block advertising which is your right, and advertising revenues are not sufficient to cover my operating costs. So you can see why I need to ask for your help. The nixCraft, takes a lot of my time and hard work to produce. If you use nixCraft, who likes it, helps me with donations:
Become a Supporter →    Make a contribution via Paypal/Bitcoin →   

Don't Miss Any Linux and Unix Tips

Get nixCraft in your inbox. It's free:



{ 19 comments… add one }
  • Planet Malaysia December 6, 2007, 7:23 am

    I think this is not secure.

  • Wilfred February 24, 2008, 4:43 pm

    Where does it say it’s secure?
    It does the job, period.
    FTP itself isn’t secure

  • Internet Marketing Legacy March 4, 2008, 6:31 pm

    Hey, this is very helpful. Thank for the script.

  • mcguillan November 25, 2008, 12:33 pm

    It would be better to encrypt at least the user and pass with md5…

  • Mrtz January 14, 2009, 5:53 am

    very useful, thanks.

  • Web Guy January 17, 2009, 7:36 am

    Hey,

    It is very helpful. Though have not tried it yet, I believe it will work like charm.

  • Jozef Sevcik January 24, 2009, 2:59 pm

    Thank you, it’s very helpful.

  • Jozef Sevcik January 25, 2009, 7:18 pm

    One note, it’s useful to run ftp with ‘-i’ option also, so I use ‘ftp -ni’.
    It will disable confirmation at mput for all files and also enable you to transfer more all files you filter (*.tar.gz in article.)
    My $0.02

  • Ethan Russell October 19, 2009, 7:07 pm

    Thanks very much for the script, worked like a champ with minimal modifications needed.

  • Ekram October 21, 2009, 1:44 pm

    Hi the problem is mput line.
    if i give the full path its give 550 error which is seems permission related.
    I just then give the file name for example mput filename works for me.

    what is the problem with
    mput path/of/filename

  • Ekram October 22, 2009, 3:32 am

    one more thing i solve the permission problem but i think mput full path name not supported?
    please help me

  • Bishop December 18, 2009, 3:46 pm

    Ekram, try changing directory either befor you enter FTP or once in. That way, it will default to looking for your file in that directory. Don’t forget the / at the beginning of your path (/path/of/filename or //path/of/filename). Note: I am going over a secure network.

    #/bin/ksh
    # —– auto ftp DRAFT!!!
    cd /path/of/filename

    HOST=’Server_IP’
    USER=’User_ID’
    PASSWD=’password’

    ftp -n $HOST <<END_SCRIPT
    quote USER $USER
    quote PASS $PASSWD
    binary
    put filename.txt /path/of/out_file/test_ftp.txt
    quit
    END_SCRIPT

  • Daniel June 13, 2010, 9:49 pm

    just a note that your cron cmd is wrong: crontab lines are minute, hour.

  • Jay October 20, 2011, 9:48 pm

    How can I get this to show the output from ftp so I can verify the file transferred correctly?

  • Sarah Hill December 29, 2011, 4:59 pm

    Wilfred, I disagree….Maytech is far more secure than most ftp file transfer services.

  • gireesh August 28, 2012, 7:04 am

    any idea about this error:
    when i tried the same from a RHEL5.5 machine to Argosoft server on deafult port “21”

    ERROR: “”KERBEROS_V4 rejected as an authentication type””

  • Ganapathi August 29, 2012, 10:49 am

    I have an some files in cent os.I need to schedule auto backup that files to the another file storage server directory. I need that script.will you please anyone post that script.

    Source : Cent Os
    Destination : Samba File storage server( another directory).

  • JimmyGP January 22, 2013, 6:58 pm

    Thanks for your help, that is exactly for my work!!!

  • Ahmed October 10, 2015, 8:26 am

    Hi,

    I have tried this script, but when i try to excute the script I am getting “The system cannot find the path specified.”

    #!/bin/sh
    USERNAME=”test-user”
    PASSWORD=”test-123″
    SERVER=”192.168.2.8″
    cd /tmp/TEST/
    # local directory to pickup *.tar.gz file
    FILE=”/tmp/TEST/”

    # remote server directory to upload backup–Windows FTP
    BACKUPDIR=”BACKUP_FOLDER”

    # login to remote server
    pftp -n -i $SERVER <<EOF
    user $USERNAME $PASSWORD
    cd $BACKUPDIR
    mput $FILE/test.text

    quit
    EOF

    Actually I am using Centos box to WIndows FTP Server, Please help

Security: Are you a robot or human?

Leave a Comment

You can use these HTML tags and attributes: <strong> <em> <pre> <code> <a href="" title="">


   Tagged with: , , , , , , , , , , , , , , , ,