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.
Featured Articles:
- 20 Linux System Monitoring Tools Every SysAdmin Should Know
- 20 Linux Server Hardening Security Tips
- My 10 UNIX Command Line Mistakes
- Linux: 20 Iptables Examples For New SysAdmins

- 25 PHP Security Best Practices For Sys Admins
- The Novice Guide To Buying A Linux Laptop
- 10 Greatest Open Source Software Of 2009
- Top 5 Email Client For Linux, Mac OS X, and Windows Users
- Top 20 OpenSSH Server Best Security Practices
- Top 10 Open Source Web-Based Project Management Software
- Top 5 Linux Video Editor Software
Facebook it - Tweet it - Print it -


{ 14 comments… read them below or add one }
I think this is not secure.
Where does it say it’s secure?
It does the job, period.
FTP itself isn’t secure
Hey, this is very helpful. Thank for the script.
It would be better to encrypt at least the user and pass with md5…
very useful, thanks.
Hey,
It is very helpful. Though have not tried it yet, I believe it will work like charm.
Thank you, it’s very helpful.
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
Thanks very much for the script, worked like a champ with minimal modifications needed.
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
one more thing i solve the permission problem but i think mput full path name not supported?
please help me
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
just a note that your cron cmd is wrong: crontab lines are minute, hour.
How can I get this to show the output from ftp so I can verify the file transferred correctly?