RHEL / CentOS Linux FTP Cron Job for automatic ftp backup

Posted on in Categories , , , , , last updated June 13, 2010

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.

Posted by: Vivek Gite

The author is the creator of nixCraft and a seasoned sysadmin and a trainer for the Linux operating system/Unix shell scripting. He has worked with global clients and in various industries, including IT, education, defense and space research, and the nonprofit sector. Follow him on Twitter, Facebook, Google+.

19 comment

  1. 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

  2. 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

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

  4. 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

  5. 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””

  6. 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).

  7. 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

Comments are closed.