{"id":534,"date":"2013-07-15T18:00:57","date_gmt":"2013-07-15T21:00:57","guid":{"rendered":"http:\/\/blog.abratel.com.br\/?p=534"},"modified":"2013-07-16T22:43:39","modified_gmt":"2013-07-17T01:43:39","slug":"backup-com-rsync-e-automacao-no-crontab","status":"publish","type":"post","link":"https:\/\/blog.abratel.com.br\/?p=534","title":{"rendered":"Backup com rsync e automa\u00e7\u00e3o no Crontab"},"content":{"rendered":"<p>Porque usar o rsync<br \/>\nSimplesmente porque ele \u00e9 um software espec\u00edfico para realiza\u00e7\u00e3o de c\u00f3pias, funciona de maneira a acelerar as transfer\u00eancias ao copiar as diferen\u00e7as entre 2 arquivos, ao inv\u00e9s de copiar o arquivo inteiro todas as vezes. Isso mesmo. Ele consegue identificar quais arquivos foram alterados e o administrador pode optar por copiar somente os arquivos novos ou modificados e n\u00e3o necessariamente todos os arquivos, o que tornaria o processo de backup demorado de maneira desnecess\u00e1ria.<\/p>\n<p>Esse recurso pode apresentar grande vantagem, principalmente para backups di\u00e1rios de grande quantidade de arquivos.<\/p>\n<p>Outro grande benef\u00edcio \u00e9 que o rsync preserva as informa\u00e7\u00f5es sobre permiss\u00f5es e propriedade dos arquivos e diret\u00f3rios, inclusive de links simb\u00f3licos.<\/p>\n<p>Instalando o rsync<br \/>\nO primeiro passo \u00e9 instalar o rsync, caso voc\u00ea ainda n\u00e3o o possua. Se voc\u00ea utiliza Debian, logado como root digite:<\/p>\n<p>  # apt-get install rsync<br \/>\nSe voc\u00ea utiliza Ubuntu, digite:<\/p>\n<p>  $ sudo apt-get install rsync<br \/>\nSomente para confirmar se seu rsync est\u00e1 funcionando normalmente, digite na linha de comando:<\/p>\n<p>  $ rsync<br \/>\nCaso apare\u00e7am informa\u00e7\u00f5es de help do rsync \u00e9 porque foi instalado corretamente.<\/p>\n<p>-C\tauto-ignorar arquivos id\u00eanticos<br \/>\n-r\tcopier de forma recursive, ou seja todos os diret\u00f3rios e subdiret\u00f3rios no caminho especificado<br \/>\n-a\tindica que estar\u00e3o sendo copiados arquivos<br \/>\n-v\tmodo verboso, mais informa\u00e7\u00f5es da c\u00f3pia<br \/>\n-z\tcomprime os arquivos durante a c\u00f3pia<br \/>\n-p\tindicador de progresso de c\u00f3pia<\/p>\n<p><strong>Exemplo de backup usando rsync no freebsd<\/strong><\/p>\n<p>  ## Pasta Admin &#8211; Backup diario<br \/>\n# as 12 horas de sgunda feira chama o rsync recursivamente     local de origem        local de destino                realizar log (criar esses diretorios antes)<\/p>\n<p>0 12 * * 1 root \/usr\/local\/bin\/rsync -av &#8211;delete &#8211;recursive \/shares\/administrador\/ \/storage01\/administrador\/seg\/ > \/storage01\/administrador\/log\/`date +\\%Y\\%m\\%d`Administrador.log<\/p>\n<p>0 12 * * 2 root \/usr\/local\/bin\/rsync -av &#8211;delete &#8211;recursive \/shares\/administrador\/ \/storage01\/administrador\/ter\/ > \/storage01\/administrador\/log\/`date +\\%Y\\%m\\%d`Administrador.log<\/p>\n<p>0 12 * * 3 root \/usr\/local\/bin\/rsync -av &#8211;delete &#8211;recursive \/shares\/administrador\/ \/storage01\/administrador\/qua\/ > \/storage01\/administrador\/log\/`date +\\%Y\\%m\\%d`Administrador.log<\/p>\n<p>0 12 * * 4 root \/usr\/local\/bin\/rsync -av &#8211;delete &#8211;recursive \/shares\/administrador\/ \/storage01\/administrador\/qui\/ > \/storage01\/administrador\/log\/`date +\\%Y\\%m\\%d`Administrador.log<\/p>\n<p>0 12 * * 5 root \/usr\/local\/bin\/rsync -av &#8211;delete &#8211;recursive \/shares\/administrador\/ \/storage01\/administrador\/sex\/ > \/storage01\/administrador\/log\/`date +\\%Y\\%m\\%d`Administrador.log<\/p>\n<p>0 12 * * 6 root \/usr\/local\/bin\/rsync -av &#8211;delete &#8211;recursive \/shares\/administrador\/ \/storage01\/administrador\/sab\/ > \/storage01\/administrador\/log\/`date +\\%Y\\%m\\%d`Administrador.log<\/p>\n<p>0 12 * * 7 root \/usr\/local\/bin\/rsync -av &#8211;delete &#8211;recursive \/shares\/administrador\/ \/storage01\/administrador\/dom\/ > \/storage01\/administrador\/log\/`date +\\%Y\\%m\\%d`Administrador.log<\/p>\n<p># BACK UP DE OUTRO SERVIDOR CONECTANDO SSH SEM SENHA (Relacao de confianca):<br \/>\n# Backup do asterisk ipbx<br \/>\n0 4 30 * 1 root \/usr\/local\/bin\/rsync -Cravzp root@172.16.2.250:\/etc\/asterisk\/ \/storage01\/ipbx\/seg\/confs >> \/storage01\/ipbx\/log\/`date +\\%Y\\%m\\%d`.log<br \/>\n0 4 35 * 1 root \/usr\/local\/bin\/rsync -Cravzp root@172.16.2.250:\/var\/lib\/mysql\/ \/storage01\/ipbx\/seg\/base >> \/storage01\/ipbx\/log\/`date +\\%Y\\%m\\%d`.log<\/p>\n<p><strong>Ap\u00f3s criar os diret\u00f3rios:<\/strong><br \/>\nmkdir \/storage01\/administrador\/<br \/>\nmkdir \/storage01\/administrador\/log\/<\/p>\n<p>Abaixo uma estrutara adicional n\u00e3o necess\u00e1ria para o proposito do titulo do artigo:<br \/>\n<strong>Verificando se ocorreu backup<\/strong><\/p>\n<p>55 23 * * * root sh \/opt\/backup\/verificaBackup.sh<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>(root@)~# cat \/opt\/backup\/verificaBackup.sh<br \/>\n#!\/bin\/bash<\/p>\n<p># VERIFICA SE OCORREU OS BACKUPS NO DIA<\/p>\n<p>nomeArq=$(date +&#8217;%Y%m%d&#8217;).log<\/p>\n<p>verificaServidor(){<br \/>\n   servidor=&#8221;$1&#8243;<br \/>\n   test -s \/opt\/backup\/resultado<br \/>\n   if [ $? -eq 0 ]<br \/>\n   then<br \/>\n      rm \/opt\/backup\/resultado<br \/>\n   fi<br \/>\n   test -s \/opt\/backup\/$servidor\/log\/$nomeArq<br \/>\n   if [ $? -eq 0 ]<br \/>\n   then<br \/>\n      wget -qO \/opt\/backup\/resultado &#8220;http:\/\/serv\/monitor\/_actions\/actionAtualizaBackup.php?servidor=$servidor&#038;check=1&#8243;<br \/>\n      echo &#8221;<\/p>\n<p>*** INICIO DO BACKUP ***<\/p>\n<p>&#8221; >> \/opt\/backup\/resultado<br \/>\n      cat \/opt\/backup\/$servidor\/log\/$nomeArq >> \/opt\/backup\/resultado<br \/>\n      echo &#8221;<\/p>\n<p>***  FIM DO BACKUP   ***<\/p>\n<p>&#8221; >> \/opt\/backup\/resultado<br \/>\n      #cat \/opt\/backup\/resultado | mail -s &#8220;Backup ($servidor) &#8211; OK&#8221; meuemail@meuemail.com<br \/>\n   else<br \/>\n      wget -qO \/opt\/backup\/resultado &#8220;http:\/\/serv\/monitor\/_actions\/actionAtualizaBackup.php?servidor=$servidor&#038;check=0&#8221;<br \/>\n      #cat \/opt\/backup\/resultado | mail -s &#8220;Backup ($servidor) &#8211; ERRO&#8221; meuemail@meuemail.com<br \/>\n   fi<br \/>\n   test -s \/opt\/backup\/resultado<br \/>\n   if [ $? -eq 0 ]<br \/>\n   then<br \/>\n      rm \/opt\/backup\/resultado<br \/>\n   fi<br \/>\n}<\/p>\n<p>verificaServidor &#8220;server4&#8221;<br \/>\nverificaServidor &#8220;server3&#8221;<br \/>\nverificaServidor &#8220;server2&#8221;<br \/>\nverificaServidor &#8220;server1&#8221;<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>Serv:\/home\/ # cat actionAtualizaBackup.php<br \/>\n<?php\ninclude (\"..\/_dao\/usuarioDao.php\");\n\n$servidor = $_GET[\"servidor\"];\n$check    = $_GET[\"check\"];\n\nswitch ($servidor) {\n    case 'servidor1':\n        $codServidor = 10;\n        break;\n    case 'servidor2':\n        $codServidor = 9;\n        break;\n    case 'servidor3':\n        $codServidor = 5;\n        break;\n    case 'servidor4':\n        $codServidor = 7;\n        break;\n}\n\nif ($codServidor &#038;&#038; $check!=\"\"){\n        if(cadastrarBackupLogs($codServidor,$check)){\n                echo \"ATUALIZACAO NO BANCO DE DADOS - OK\".chr(13).chr(10);\n                echo chr(13).chr(10);\n                echo \"Servidor: \".$servidor.chr(13).chr(10);\n                echo \"Checked: \".$check.chr(13).chr(10);\n        }else{\n                echo \"ATUALIZACAO NO BANCO DE DADOS - ERRO\";\n        }\n}else{\n        echo \"Erro - Falta de Parametros - Servidor:\".$servidor.\" Check:\".$check;\n}\n\n?><\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\nPar\u00e2metros<br \/>\n-l usu\u00e1rio &#8212; lista as tarefas agendadas para o usu\u00e1rio<br \/>\n-e usu\u00e1rio &#8212; edita o agendador<br \/>\n-r usu\u00e1rio &#8212; apaga o arquivo do usu\u00e1rio<br \/>\n-c diret\u00f3rio &#8212; especifica um diret\u00f3rio para o Crontab<br \/>\nSintaxe:<br \/>\nDentro do arquivo que se abre ap\u00f3s o comando existe uma sintaxe conforme a seguir:<br \/>\nmm hh dd MM ss script<br \/>\nonde<br \/>\nmm = minuto(0-59)<br \/>\nhh = hora(0-23)<br \/>\ndd = dia(1-31)<br \/>\nMM = mes(1-12)<br \/>\nss = dia_da_semana(0-6)<br \/>\nscript = comando a ser executado.<br \/>\nObs 1: Em dia_da_Semana, 0 refere-se a domingo; e 6, ao s\u00e1bado.<br \/>\n       No caso de dia da semana funciona tamb\u00e9m as tr\u00eas primeiras letras<br \/>\n       (em ingl\u00eas) do dia da semana (SUN,MON,TUE,WED,THU,FRI,SAT)<br \/>\nObs 2: Em qualquer posi\u00e7\u00e3o pode-se usar o * (asterisco) quando n\u00e3o se<br \/>\n       importar com o campo em quest\u00e3o.<br \/>\nObs 3: Pode-se utilizar intervalos nesses campos. O caracter para intervalo<br \/>\n       \u00e9 o &#8211; (hifen).<br \/>\nObs 4: Pode-se utilizar lista de valores nesses campos. O caracter para a<br \/>\n       lista \u00e9 a , (v\u00edrgula).<br \/>\nObs 5: Qualquer texto colocado ap\u00f3s o programa que ser\u00e1 executado ser\u00e1<br \/>\n       considerado coment\u00e1rio e n\u00e3o ser\u00e1 interpretado pelo cron<br \/>\nSeguem alguns exemplos:<br \/>\nTodo dia de hora em hora (hora cheia)<br \/>\n  00 * * * * \/bin\/script<br \/>\nDe cinco em cinco minutos todos os dias (note a divis\u00e3o por 5 do intervalo 00-59)<br \/>\n  00-59\/5 * * * * \/bin\/script<br \/>\nNas seguintes horas: 10, 12, 16, 18, 22 aos 15 minutos da hora<br \/>\n  15 10,12,16,18,22 * * * \/bin\/script<br \/>\nNos primeiros cinco dias do m\u00eas \u00e0s 19:25<br \/>\n  25 19 01-05 * * \/bin\/script<br \/>\nDe segunda a sexta ao meio-dia e a meia-noite<br \/>\n  00 00,12 * * 1-5 \/bin\/script<br \/>\nScript rodar Segunda,Quarta,Sexta \u00e0s 2 horas<br \/>\n   0 2 * * mon,wed,fri \/bin\/script<br \/>\nScript para rodar Ter\u00e7a,Quinta \u00e0s 3 horas<br \/>\n   0 3 * * tue,thu \/bin\/script<br \/>\nScript para ser executado minuto a minuto<br \/>\n   *\/1 * * * * \/bin\/script<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Porque usar o rsync Simplesmente porque ele \u00e9 um software espec\u00edfico para realiza\u00e7\u00e3o de c\u00f3pias, funciona de maneira a acelerar as transfer\u00eancias ao copiar as diferen\u00e7as entre 2 arquivos, ao inv\u00e9s de copiar o arquivo inteiro todas as vezes. Isso mesmo. Ele consegue identificar quais&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[10,2],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/posts\/534"}],"collection":[{"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=534"}],"version-history":[{"count":0,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/posts\/534\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=534"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=534"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=534"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}