Skip to content

Automatic cPanel Backup via Curl & Cron

This setup creates a full backup of your cPanel account each month, maintaining one backup for each previous year, and monthly backups for the current year. 

You need two files:

  • crontab.txt (for setting up the cron job, that is, the automation)
  • full_backup.sh (the actual backup commands)

Crontab.txt

MAILTO="webmaster@example.com"
 
5 4 28 * * /home/yourdomain/full_backup.sh
5 4 31 12 * /home/yourdomain/full_backup.sh --year

You'll have to set your crontab with a command like:

crontab crontab.txt

You can see what's in your crontab with the following command:

crontab -l

full_backup.sh

###
# cPanel Backup via Cron v1.2
###

###
#  Instructions
###
# Make sure CP_SCP_BACKUP_ROOT directory exists. It is "web_backup" by default.
# Within this directory you'll need a directory for each cPanel account you're
# backing up.
#
# I.e. if you're backing up "example.com" and "foobar.com" and you want them
# to be backed up in the default location of "web_backup", you'll need to
# execute the following commands at the recieving end:
# mkdir ~/web_backup
# mkdir ~/web_backup/example.com
# mkdir ~/web_backup/foobar.com
###

#cPanel info -- host that is being backed up
CP_USERNAME=username
CP_PASSWORD=password
CP_DOMAIN=yourdomain.com
CP_SKIN=x3 # plain "x" is probably the most common one

#SCP/FTP info -- host to receive the backup file
CP_SCP_USER=username
CP_SCP_PASS=password
CP_SCP_HOST=example-backup-host.com
CP_SCP_PORT=22

# see cPanel backup page for alternatives of transfer mode
CP_SCP_MODE=scp 

# target directory on remote host; do not include domain names in this one
CP_SCP_BACKUP_ROOT=web_backup%2F  # url encoded, e.g. "/" equals "%2F"

# creates the target path (directory and filename)
# if you make changes, remember to url encode slashes, i.e. "/" equals "%2F"
# if --year option is used, script creates a yearly filename, otherwise a monthly one
if [ "$1" = '--year' ]; then
	CP_SCP_RDIR=$CP_SCP_BACKUP_ROOT$CP_DOMAIN%2F$CP_DOMAIN-year-`date +%Y`.tar.gz
else
	CP_SCP_RDIR=$CP_SCP_BACKUP_ROOT$CP_DOMAIN%2F$CP_DOMAIN-month-`date +%m`.tar.gz
fi

# email address for sending notification after backup is completed
CP_EMAIL=webmaster@example.com
# initiate backup (the following command should be on one line)
curl --silent --insecure --user $CP_USERNAME:$CP_PASSWORD -d "dest=$CP_SCP_MODE&email=$CP_EMAIL&server=$CP_SCP_HOST&user=$CP_SCP_USER&pass=$CP_SCP_PASS&port=$CP_SCP_PORT&rdir=$CP_SCP_RDIR" https://$CP_DOMAIN:2083/frontend/$CP_SKIN/backup/dofullbackup.html > /dev/null

# gets curl return code
CURL_EXIT=$?

# curl encountered an error
if [ $CURL_EXIT -gt 0 ]; then
	echo curl returned exit status $CURL_EXIT - see curl manual pages for more details
	exit 69
fi

# everything ok
exit 0

Put the file, say, in your account root and make the file executable (e.g. with command "chmod 700 full_backup.sh").

Let me know in the comments how it works for you. Thanks!

Monthly Archives: February 2008

How To Avoid Mac Related Injuries

01-Feb-08

..or how to avoid RSI with this great piece of software: AntiRSI. [UPDATE: AntiRSI site down, use CNET to get the file.] I love it! I have to admit it's kind of annoying whenever it tells me to take a break, but the breaks really make me feel better, and, I am sure, more productive. […]