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: December 2007

Clean Up Your Documents Folder

29-Dec-07

Tired of getting your Documents folder full of Application specific stuff (that should be placed elsewhere)? You've deleted the folders but they just keep coming back? Don't worry, there's another way. Pick your fight: AdobeStockPhotos Open Adobe Bridge and change the location of this folder in Preferences. (You might need to delete this folder in […]

Move Any Given Folder Away From Documents

28-Dec-07

Earlier I posted a tip how to clean up your Documents folder by moving Microsoft User Data elsewhere. This tip is more generic . This tip is taken from "Sir Novian's Blog" but as it doesn't really function that well (I had to access it via Google cache), I'll just paste the whole thing here […]

How To Fix Mail.app Message Listing

18-Dec-07

Here's a standard view on Mail.app (OS X 10.5). If the selected message on your message listing (showing header info, number 1 in the image) does not show up in the actual message box below (number 2), but instead Mail.app shows an another message, your index may have gone bad. Worry not. To fix the […]

Screen Sharing via SSH With A Single Click

04-Dec-07

This tip uses AppleScript and shell script to create an AppleScript application that launches an ssh secured Screen Sharing (VNC client/server, introduced in OS X 10.5) to your remote machine. First, make sure you have Screen Sharing enabled (System Preferences -> Sharing -> Screen Sharing). Second, make sure you can use passwordless ssh login. Third, […]