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 2009

Online Backup for Mac (Mozy, Carbonite, iDrive, Dropbox, ...)

29-Dec-09

Trying to find out a way to backup my data online. Lots of options. Most of the "unlimited" backup plans have a caveat: Mozy -- Free account of 2 GB. Deletes permanently deleted files after 30 days. Carbonite -- Deletes permanently deleted files after 30 days. Backblaze -- Deletes permanently deleted files after 4 weeks. […]

[Google Analytics] Track to Two Profiles the Async Way

15-Dec-09

The new asynchronous tracking in Google Analytics requires new code as well. If you need to track more than one profile, this is how you do it.

[Excel] Recalculate Sheets on Workbook Open (Using VBA)

10-Dec-09

Add to ThisWorkbook->Workbook code. Private Sub Workbook_Open() Dim oSht As Worksheet Dim xlCalc As XlCalculation On Error GoTo ErrorHandler 'remember the user's calculation setting before setting it to manual xlCalc = Application.Calculation Application.Calculation = xlCalculationManual For Each oSht In Worksheets oSht.EnableCalculation = False oSht.EnableCalculation = True Next oSht Application.Calculate ErrorExit: On Error Resume Next 'restore […]

[Outlook] Remove Attachments (Bulk/Batch): Use VBA

10-Dec-09

Had to remove attachments from a bunch of emails. This VBA code did the trick (although it does not know how to handle attached emails, i.e. emails that have another email attached). (Remembe to create a reference to the Microsoft Scripting Runtime library: in VBA choose Tools -> References and check its checkbox.) Option Explicit […]

[Excel] Days in Month

01-Dec-09

=DAY(DATE(YEAR(A1);MONTH(A1)+1;1)-1) , where A1 contains a valid date.