Revision 209 is a pre-publication revision. (Viewing current revision instead.)

Automatic cPanel backup (domain & MySQL) with cron & PHP

OK, so I posed the question, and I found the answer. (Of course I had to find it myself, I just don't have people who regularly read my posts and do research for me!) The situation is this: I use cPanel on my web hosting server. I use the cPanel backup tool to regularly backup my home directory (includes my web files, mail, etc), and my MySQL databases. I love the fact that you can use it to backup to a remote FTP server, and I do that on a fairly regular basis. The major drawback is that you have to remember/schedule to perform this backup manually. This becomes especially difficult if you have multiple cPanel accounts. It would be amazing if you could just schedule the cPanel backup to run at regular intervals, perhaps with cron. Well, although there's no option for that in cPanel, the script below will allow you to do exactly that! This backup script includes SSL support. This isn't necessary if you run the script on the server for which you're generating the backup; but the SSL support is very important if you're running the script somewhere else to connect to your cPanel hosting account. [php]<?php // PHP script to allow periodic cPanel backups automatically, optionally to a remote FTP server. // This script contains passwords. KEEP ACCESS TO THIS FILE SECURE! (place it in your home dir, not /www/) // ********* THE FOLLOWING ITEMS NEED TO BE CONFIGURED ********* // Info required for cPanel access $cpuser = "username"; // Username used to login to CPanel $cppass = "password"; // Password used to login to CPanel $domain = "example.com"; // Domain name where CPanel is run $skin = "x"; // Set to cPanel skin you use (script won't work if it doesn't match). Most people run the default x theme // Info required for FTP host $ftpuser = "ftpusername"; // Username for FTP account $ftppass = "ftppassword"; // Password for FTP account $ftphost = "ftp.example.com"; // Full hostname or IP address for FTP host $ftpmode = "ftp"; // FTP mode ("ftp" for active, "passiveftp" for passive) // Notification information $notifyemail = "you@example.com"; // Email address to send results // Secure or non-secure mode $secure = 0; // Set to 1 for SSL (requires SSL support), otherwise will use standard HTTP // Set to 1 to have web page result appear in your cron log $debug = 0; // *********** NO CONFIGURATION ITEMS BELOW THIS LINE ********* if ($secure) { $url = "ssl://".$domain; $port = 2083; } else { $url = $domain; $port = 2082; } $socket = fsockopen($url,$port); if (!$socket) { echo "Failed to open socket connection... Bailing out!\n"; exit; } // Encode authentication string $authstr = $cpuser.":".$cppass; $pass = base64_encode($authstr); $params = "dest=$ftpmode&email=$notifyemail&server=$ftphost&user=$ftpuser&pass=$ftppass&submit=Generate Backup"; // Make POST to cPanel fputs($socket,"POST /frontend/".$skin."/backup/dofullbackup.html?".$params." HTTP/1.0\r\n"); fputs($socket,"Host: $domain\r\n"); fputs($socket,"Authorization: Basic $pass\r\n"); fputs($socket,"Connection: Close\r\n"); fputs($socket,"\r\n"); // Grab response even if we don't do anything with it. while (!feof($socket)) { $response = fgets($socket,4096); if ($debug) echo $response; } fclose($socket); ?>[/php] To schedule the script to run regularly, save it as fullbackup.php in your top directory (not /public_html, which would be less secure), and enter a new cron job like the following: 15 2 * * * /usr/local/bin/php /home/youraccount/fullbackup.php (Runs every night at 2:15 a.m.) or 15 2 * * 1 /usr/local/bin/php /home/youraccount/fullbackup.php (Runs every Sunday night at 2:15 a.m.)

Revisions

  • May 30, 2012 @ 01:37:00 [Current Revision] by PeterLugg
  • May 30, 2012 @ 01:35:49 by PeterLugg

Revision Differences

May 30, 2012 @ 01:35:49Current Revision
Content
 Added: OK, so I posed the question, and I found the answer. (Of course I had to find it myself, I just don't have people who regularly read my posts and do research for me!)
 Added: The situation is this: I use cPanel on my web hosting server. I use the cPanel backup tool to regularly backup my home directory (includes my web files, mail, etc), and my MySQL databases. I love the fact that you can use it to backup to a remote FTP server, and I do that on a fairly regular basis.
 Added: The major drawback is that you have to remember/schedule to perform this backup manually. This becomes especially difficult if you have multiple cPanel accounts. It would be amazing if you could just schedule the cPanel backup to run at regular intervals, perhaps with cron. Well, although there's no option for that in cPanel, the script below will allow you to do exactly that!
 Added: This backup script includes SSL support. This isn't necessary if you run the script on the server for which you're generating the backup; but the SSL support is very important if you're running the script somewhere else to connect to your cPanel hosting account.
 Added: [php]&lt;?php
 Added: // PHP script to allow periodic cPanel backups automatically, optionally to a remote FTP server.
 Added: // This script contains passwords. KEEP ACCESS TO THIS FILE SECURE! (place it in your home dir, not /www/)
 Added: // ********* THE FOLLOWING ITEMS NEED TO BE CONFIGURED *********
 Added: // Info required for cPanel access
 Added: $cpuser = &quot;username&quot;; // Username used to login to CPanel
 Added: $cppass = &quot;password&quot;; // Password used to login to CPanel
 Added: $domain = &quot;example.com&quot;; // Domain name where CPanel is run
 Added: $skin = &quot;x&quot;; // Set to cPanel skin you use (script won't work if it doesn't match). Most people run the default x theme
 Added: // Info required for FTP host
 Added: $ftpuser = &quot;ftpusername&quot;; // Username for FTP account
 Added: $ftppass = &quot;ftppassword&quot;; // Password for FTP account
 Added: $ftphost = &quot;ftp.example.com&quot;; // Full hostname or IP address for FTP host
 Added: $ftpmode = &quot;ftp&quot;; // FTP mode (&quot;ftp&quot; for active, &quot;passiveftp&quot; for passive)
 Added: // Notification information
 Added: $notifyemail = &quot;you@example.com&quot;; // Email address to send results
 Added: // Secure or non-secure mode
 Added: $secure = 0; // Set to 1 for SSL (requires SSL support), otherwise will use standard HTTP
 Added: // Set to 1 to have web page result appear in your cron log
 Added: $debug = 0;
 Added: // *********** NO CONFIGURATION ITEMS BELOW THIS LINE *********
 Added: if ($secure) {
 Added: $url = &quot;ssl://&quot;.$domain;
 Added: $port = 2083;
 Added: } else {
 Added: $url = $domain;
 Added: $port = 2082;
Deleted: Added: }
 Added: $socket = fsockopen($url,$port);
 Added: if (!$socket) { echo &quot;Failed to open socket connection... Bailing out!\n&quot;; exit; }
 Added: // Encode authentication string
 Added: $authstr = $cpuser.&quot; :&quot;.$cppass;
 Added: $pass = base64_encode($authstr);
 Added: $params = &quot;dest=$ftpmode&amp; email=$notifyemail&amp;server= $ftphost&amp; user=$ftpuser&amp; pass=$ftppass&amp; submit=Generate Backup&quot;;
 Added: // Make POST to cPanel
 Added: fputs($socket,&quot;POST /frontend/&quot; .$skin.&quot; /backup/dofullbackup.html?&quot; .$params.&quot; HTTP/1.0\r\n&quot;);
 Added: fputs($socket,&quot;Host: $domain\r\n&quot;);
 Added: fputs($socket,&quot; Authorization: Basic $pass\r\n&quot;);
 Added: fputs($socket,&quot;Connection: Close\r\n&quot;);
 Added: fputs($socket,&quot; \r\n&quot;);
 Added: // Grab response even if we don't do anything with it.
 Added: while (!feof($socket)) {
 Added: $response = fgets($socket,4096);
 Added: if ($debug) echo $response;
 Added: }
 Added: fclose($socket);
 Added: ?&gt;[/php]
 Added: To schedule the script to run regularly, save it as fullbackup.php in your top directory (not /public_html, which would be less secure), and enter a new cron job like the following:
 Added: 15 2 * * * /usr/local/bin/php /home/youraccount/ fullbackup.php
 Added: (Runs every night at 2:15 a.m.)
 Added: or
 Added: 15 2 * * 1 /usr/local/bin/php /home/youraccount/ fullbackup.php
 Added: (Runs every Sunday night at 2:15 a.m.)

Note: Spaces may be added to comparison text to allow better line wrapping.

Tags: , ,

No comments yet.

Leave a Reply