Aprenda a configurar um full backup no cPanel utilizando cron job
Esses dias GANHEI um bom tempo pesquisando sobre a possibilidade de automatizar um backup dos meus sites e dos meus clientes no cPanel, de forma que nem eu nem os clientes tivessem que acessar o cPanel e gerar o backup.
Pesquisei em fóruns, grupos e até mesmo no fórum do cPanel, mas estava realmente uma dificuldade encontrar algo que funcionasse da forma que eu queria:
- Gerar backup dos arquivos e da base de dados.
- Copiar este backup para uma pasta específica dentro da minha hospedagem para que eu possa baixar via FTP.
- Apagar o arquivo a cada 15 dias, deixando apenas o mais novo.
Realizar estes procedimentos em um dia e hora específico da semana
Como gero esse backup automático no cPanel?
Vamos trabalhar com um arquivo PHP, responsável pelo código que realiza a conexão, cria e apaga o backup, vou chamar este arquivo de backup.php.
Também vamos precisar criar uma tarefa Cron Job no cPanel, se você possui uma revenda deverá criar uma tarefa em cada conta, se possui um VPS poderá configurar via SSH, no meu caso é uma revenda, sendo assim adicionei para cada conta um cron job, nada de drama, depois de pronto fica ótimo e otimiza seu tempo.
Nosso arquivo backup.php está configurado para realizar o backup na pasta /public_html/backup/ então pode criar ela.
Após criar esta pasta você pode realizar o upload do arquivo backup.php para a pasta home em seu servidor (não na www), se tiver dúvidas entra no seu cPanel e olha na sidebar da esquerda, lá diz qual sua pasta home.
Após subir este arquivo determine a permissão 750 para ele.
A parte do nosso arquivo já foi feita, agora precisamos criar a tarefa cron job para isso faça:
- Entre no cPanel
- Na seção AVANÇADA vá em “Tarefas Cron”
- Atualize seu e-mail para que receba um alerta sempre que o CRON JOB rodar (não obrigatório)
- Em “Minuto” defina em qual minuto será realizado o seu backup
- Em “Hora” defina em qual hora será realizado o seu backup
- Em “Dia Útil” defina em qual dia será realizado o seu backup
- 0 = domingo
- 1 = segunda
- 2 = terça
- 3 = quarta
- 4 = quinta
- 5 = sexta
- 6 = sábado)
- Na linha de comando insira o PATH do seu SCRIPT, “/usr/local/bin/php /home/nome-da-sua-home/backup.php”
- Clique em “Adicionar Novo Trabalho Cron” e sua configuração de backup estará pronta.
Observação 1: Este espaço no PATH após é necessário por conta do meu PHP 5.2, se tiverem problemas leiam esse link.
Observação 2: Tive alguns bugs quando a senha do cPanel e ou FTP continham caracteres especiais, caso tenham esse tipo de problemas utilizem senhas alfanuméricas apenas.
–> Este tutorial você também pode ler aqui
CÓDIGO BACKUP.PHP
<?php
/*
cPanel Backup Script
This script will auto create backup file, transfer to FTP server
By Michael Phan @ sondaika.com
*/
// Change to your information
$cpanel_user = “USUÁRIO DO CPANEL”; // change to your cpanel user
$cpanel_password = “SENHA DO CPANEL”; // change to your cpanel password
$domain = “DOMINIO.COM”; // your domain
$email_to_report = “SEUEMAIL@SEUEMAIL.COM”; // Your email to receive notification when the script finish backup. Leave it blank if you dont want to receive notification.
$ftp = true; // transfer to FTP server or not
$ftpserver = “DOMINIO FTP”; // your ftp server address
$ftpusername = “USUÁRIO DO FT”; // your ftp username
$ftppassword = “SENHA DO FTP”; // your ftp password
$ftpdirectory = “/public_html/backup/”; // your backup directory
$daytostore = 7; // how many days do you want to store the backup file, the files which older than this number of day will be deleted
//This part is option, the bellow information is work for almost user
$ftpport = “21”; // default port for FTP connection of most hosting providers now
$theme = “x3”; // change to your cpanel theme name, default is most popular theme now named paper_lantern
$secure = false; // use https or not
// =================================================================================
// ========= do not change anything bellow unless you are a master of PHP ==========
// =================================================================================
// Backup
$auth = base64_encode(“$cpanel_user” . “:” . “$cpanel_password”);
if ($secure) {
$url = “ssl://” . $domain;
$port = 2083;
} else {
$url = $domain;
$port = 2082;
}
$socket = fsockopen($url, $port);
if (!$socket) {
exit(“Failed to open socket connection.”);
}
if ($ftp) {
$params = “dest=ftp&server=$ftpserver&user=$ftpusername&pass=$ftppassword&port=$ftpport&rdir=$ftpdirectory&submit=Generate Backup”;
} else {
$params = “submit=Generate Backup”;
}
fputs($socket, “POST /frontend/” . $theme . “/backup/dofullbackup.html?” . $params . ” HTTP/1.0\r\n”);
fputs($socket, “Host: $domain\r\n”);
fputs($socket, “Authorization: Basic $auth\r\n”);
fputs($socket, “Connection: Close\r\n”);
fputs($socket, “\r\n”);
while (!feof($socket)) {
$response = fgets($socket, 4096);
echo $response;
}
fclose($socket);
// delete old file from ftp if FTP set to true
if ($ftp) {
// set up basic connection
$conn_id = ftp_connect($ftpserver);
// login with username and password
$login_result = ftp_login($conn_id, $ftpusername, $ftppassword);
if ($login_result) {
$filelistname = ftp_nlist($conn_id, $ftpdirectory);
foreach ($filelistname as $key => $value) {
$file = $ftpdirectory . $value;
$mdftime = ftp_mdtm($conn_id, $file);
if (($value!==”.”) && ($value !==”..”) && ((time() – $mdftime) > $daytostore * 86400)) {
// try to delete $file
if (ftp_delete($conn_id, $file)) {
echo “$file deleted successful\n”;
} else {
echo “could not delete $file\n”;
}
}
}
// close the connection
ftp_close($conn_id);
}
else {
echo “FTP connection Failed”;
}
}
// send report email
if ($email_to_report !== “”) {
$attime = date(‘d-m-Y H:i:s’);
$to = $email_to_report;
$subject = ‘Auto backup for ‘ . $domain . ‘ at ‘ . $attime . ‘ successful.’;
$message = ‘Auto backup for ‘ . $domain . ‘ at ‘ . $attime . ‘ successful.’;
$headers = ‘From: autobackupreport@’ . $domain . “\r\n” .
‘Reply-To: autobackupreport@’ . $domain . “\r\n” .
‘X-Mailer: PHP/’ . phpversion();
mail($to, $subject, $message, $headers);
}
?>
Oi Bruno,
Gostei do post, da dica e da qualidade das explicações. Agora é só aplicar.
Obrigado Fabrice, é sempre bom compartilhar estas informações para que outros possam aprender.
Bruno, muito bom seu post.
Mas como faria para salvar esse backup no AWS S3?
Obrigado!
Ricardo, este script PHP é elaborado para enviar o backup à um serviço de FTP, se o AWS possuir conexão FTP você pode colocar as informações de conexão do FTP e gerar a cópia, mas não sei se o AWS tem FTP. Acredito que em qualquer serviço que possua FTP você consiga utilizar este recurso.
Ola Bruno! E onde insiro as credencias do ftp pro script php enviar pra la?
Opa Emanuel! Esse script tem tanto tempo que nem sei se funciona mais, mas enfim. Cara, ai no script tem onde colocar esses dados, está destacado em maiúsculo, inicia na linha 10.
Olá bruno, vi uma pergunta sua em outro post sobre esse assunto, e agora encontrei aqui e pelo que pude reparar você conseguiu fazer funcionar. tenho uma dúvida aqui, esse backup que o script gera é um backup completo incluindo o mysql ? Ele gera um arquivo zip em uma determinada pasta no diretório /home ? são alguma dúvidas que tenho aqui, pois tenho muitos sites e preciso ter segurança disso. Obrigado. So mais um detalhe, tenho um outro software que faz backup do ftp para meu pc, então pensei em jogar a tarefa cron para as 6 da manhã… Leia mais »
Acho que te respondo essa por e-mail (risos) me confirme se puder.
Amigo o e-mail a cima está com problemas, então se puder me responder pelo e-mail do gmail agradeço, estou precisando de uma ajudinha para gerar esse backup. Obrigado.
Jeferson, desta forma que foi configurado ele gera um backup em formato compactado de toda sua pasta HOME, ou seja, ele vai pegar todas as pastas de banco de dados, e-mails, public_html, cgi, e por ai vai. É de fato um backup FULL. Após gerar esse backup você pode baixar para o FTP.
Olá Bruno venho tirar mais uma dúvida aqui sobre esse assunto. É somente eu copiar esse script ou preciso mudar as aspas, pois aqui as aspas duplas contam como erro no dreamweaver. Obriagado
Neste caso eu te aconselho a testar, mas acredito que você tenha que mudar as aspas sim, infelizmente o WordPress aqui deu uma editada, mas antes tente usar outro editor de texto que não seja o Dreamweaver, tente o sublime-text ou notepad++. Valeu.
Está dando um erro na linha 82 if (($value!==”.”) && ($value !==”..”) && ((time() – $mdftime) > $daytostore * 86400))
Amigo se eu lhe mandar o arquivo você vão da uma olhadinha nessa linha. ou então mande um link de um que tenha para eu fazer o download, cara estou tentando e pra falar a verdade já baixei vários de outros lugares só que o deles não tem diretório para ficar o arquivo de backup então não seu se está funcionando ou não, pois o arquivo eu não encontro. Se puder da uma ajuda ai amigo, estou precisando disso faz tempo e ainda não consegui. Obrigado.
jefmachia@gmail.com ou jeferson@techmach.com.br
Vou te mandar o script por e-mail mais tarde.
Bruno consegui fazer funcionar, arranquei aquela linha lá que estava dando erro, mas aquela linha é a que apaga o backup existente poderia apenas verificar no seu codigo o erro que estava dando aqui para ver se resolvo esse pedacinho vou te mostrar a parte de cortei e funcionou, ai se puder dar uma olhadinha no seu código e me passar essa linha agradeço. if (($value!==”.”) && ($value !==”..”) && ((time() – $mdftime) > $daytostore * 86400)) { // try to delete $file if (ftp_delete($conn_id, $file)) { echo “$file deleted successfuln”; } else { echo “could not delete $filen”; }… Leia mais »
É provável que seja algum erro com estas aspas.
Bruno estou tendo o mesmo erro na linha 82, vc consegue me manda a correção que o Jeferson comentou.
Whashington,
Acredito que ele tenha ou mudado as aspas duplas ou apagado as linhas:
if (($value!==”.”) && ($value !==”..”) && ((time() – $mdftime) > $daytostore * 86400)) {
// try to delete $file
if (ftp_delete($conn_id, $file)) {
echo “$file deleted successfuln”;
} else {
echo “could not delete $filen”;
}
}
Tenta isso.
Olá amigo. O erro no codigo ai está na subtração do tempo modificado pelo tempo de backup. O sinal de menos está como um sinal de hífem: “–”, quando na verdade o sinal de menos é: “-“.
Modifiquei isso e resolveu pra mim.
Obrigado Bruno, está funcionando show de bola agora depois que me mandou…Abração
opa preciso de um help esstou com problemas nesse codigo php no caractere @ dos emails e usuario de ftp
amigo, estou tendo um problema com o “@”. Na minha senha do ftp tem o arroba e ta dando erro de sintax, como resolver sem trocar a senha?
Já tentei de diversas formas e scripts similares, mas não consegui fazer funcionar.
Sempre recebo a mensagem:
Warning: fsockopen(): unable to connect to xxxx.com.br:2082 (Connection refused) in /home/xxxxx/backup3.php on line 45
Failed to open socket connection… Bailing out!n
obs: xxxxx – informações protegida!
Pode me ajudar?
Pelo que entendo esse fsockopen() significa que o servidor não te dá permissão para salvar nessa pasta, veja com eles.
Bruno e galera, tudo bem? Estou com um problema no meu código quando subi no server:
Warning: fsockopen(): unable to connect to ssl://meudominio.com.br:2083 (Connection refused) in /home/domain/public_html/backup/backup.php on line 57
Failed to open socket connection.
Eu tenho pela Locaweb. O que me disseram pelo que avaliaram é que preciso de um IP dedicado e um certificado próprio.
Não sei se seria porque o servidor é compartilhado.
O código está exatamente igual a este acima. Coloquei e testei todos os itens (username, password, ftp, etc). Alguém consegue me ajudar?
Abs!
Olha, você vai me desculpar, mas em se tratando de LOCAWEB eu duvidaria de tudo. Tudo o que funciona bem em outros servidores, no deles dá problema, nunca indico. Testei o código novamente aqui e funcionou de boa. Pelo que entendo esse fsockopen() significa que o servidor não te dá permissão para salvar nessa pasta.
boa tarde, o meus arquivo esta dando este erro o que pode ser ja que eu copiei ele exatamente igual acima, meu servidor é da hostgator
Parse error: syntax error, unexpected ‘@’ in /home/phoenixc/BackupAuto2.php on line 13
Ola bruno,
Estou tendo o seguinte problema:
Parse error: syntax error, unexpected ‘:’ in /home/…/public_html/backup.php on line 35
35 $url = “ssl://” . $domain;
Não vejo erro, mas… como resolver?
Boa tarde,
Segui todos os procedimentos e estou tendo o seguinte erro: “Parse error: syntax error, unexpected T_VARIABLE in /home/meudominio/backup.php on line 32
Linha 32: $auth = base64_encode(“$cpanel_user” . “:” . “$cpanel_password”);
Antes estava reclamando do ‘@’ usado com o meu email na linha 13 (no campo $email_to_report = “”;) e resolvi deixar em branco.
Erro anterior:
PHP Parse error: syntax error, unexpected ‘@’ in /home/meudominio/backup.php on line 13
Estou com o mesmo erro citado acima
Meu PHP é o 5.2
Tem como fazer um backup automático só de uma aplicação através do cron. Tipo queria fazer um backup de um sistema instalado no servidor compartilhado. Tem como fazer essa configuração no cpanel?
Jak, se esta aplicação está em uma pasta dentro do host eu penso que você pode sei conseguir realizar o backup da mesma. Talvez você precise realizar algumas modificações no path, até porque desde que eu fiz essa postagem não sei se ocorreram mudanças no cPanel, mas acredito que vá de boa mudando apenas o path.
Cara, fiz isso meu cpanel porém não consigo ver log nem nada, só vejo que a pasta de backups está vazia e recebo um email com o que ta escrito dentro do php, nada a mais, o que fiz de errado?
Sinceramente faz tempo que não mexo nisso. Você já viu se o path do PHP (versão) está correto?
Sim, está correto, ovu dar uma fuçada aqui pra ver consigo achar o erro
Olá amigo, obrigado por essa informação da hora, no meu caso eu gostaria de fazer backup apenas de uma pasta, em que lugar eu coloco no scrip php?
Olá Marco. Cara, tem anos que não utilizo esse script, até porque hoje os Clouds e até mesmo os CMS ou Frameworks utilizam suas ferramentas próprias para realizar backups diários ou conforme sua necessidade. Eu vou olhar esse código e ver se consigo fazer alguma alteração nele. Valeu por comentar.