404 Not Found


nginx
{"id":9338,"date":"2015-11-27T17:48:41","date_gmt":"2015-11-27T19:48:41","guid":{"rendered":"https:\/\/cleuber.com.br\/?p=9338"},"modified":"2021-11-19T11:11:24","modified_gmt":"2021-11-19T14:11:24","slug":"como-usar-o-comando-rsync-para-transferir-dados-para-diretorios-locais-e-remotos","status":"publish","type":"post","link":"https:\/\/cleuber.com.br\/index.php\/2015\/11\/27\/como-usar-o-comando-rsync-para-transferir-dados-para-diretorios-locais-e-remotos","title":{"rendered":"Como Usar o Comando RSync Para Transferir Dados Para Diret\u00f3rios Locais e Remotos"},"content":{"rendered":"

Ol\u00e1\u00a0pessoal,<\/p>\n

Hoje, vou postar este\u00a0tutorial sobre o RSync, cobrindo\u00a0o uso b\u00e1sico deste poderoso utilit\u00e1rio.
\nO Rsync \u00e9 mais do que um comando ou um simples\u00a0programa. Ele pode te oferecer funcionalidades poderosas como a de sistemas de backup.<\/p>\n

Imagine que voc\u00ea tenha dois servidores de arquivos, um em seu local, e outro em outro local, (como outro bairro, ou cidade, estado, pa\u00eds e continente). E voc\u00ea precisa fazer um backup de um para o outro, ou que o conte\u00fado dos dois sejam sincronizados. O Rsync pode fazer isso para voc\u00ea. E mesmo para uma necessidade mais simples como fazer backup ou sincronizar arquivos em diret\u00f3rios\u00a0de m\u00e1quinas em sua rede local, ou mesmo na mesma m\u00e1quina.<\/p>\n

O que \u00e9 Rsync?<\/h3>\n

Rsync, que \u00e9 uma abrevia\u00e7\u00e3o de Remote Sync, ou seja, “sincroniza\u00e7\u00e3o remota”, \u00e9 uma ferramenta de sincroniza\u00e7\u00e3o de arquivos locais e remotos. Ele usa um algoritmo que minimiza a quantidade de dados copiados movendo apenas as partes de arquivos que foram alterados. Isso \u00e9 o que chamamos de c\u00f3pia incremental, em um processo de backup. Claro que previamente \u00e9 preciso ter um backup completo, para que\u00a0nas pr\u00f3ximas vezes, ele fa\u00e7a o incremental.<\/p>\n

Rsync \u00e9 uma ferramenta muito flex\u00edvel de sincroniza\u00e7\u00e3o habilitada para rede. Tamb\u00e9m pode se referir ao protocolo de rede desenvolvido para utilizar esta ferramenta.
\nQuando chamo o rsync neste tutorial, estou me referindo principalmente ao servi\u00e7o, e n\u00e3o o protocolo.<\/p>\n

Devido \u00e0 sua presen\u00e7a\u00a0em sistemas Unix-like, por vir inclu\u00eddo por padr\u00e3o\u00a0na maioria das distribui\u00e7\u00f5es Linux, ele se tornou muito popular como uma ferramenta inclu\u00eddo em scripts do sistema Linux.<\/p>\n

Sintaxe B\u00e1sica<\/h3>\n

A sintaxe b\u00e1sica do rsync \u00e9 muito simples, e funciona de uma maneira que \u00e9 semelhante ao ssh, scp e cp.<\/p>\n

Ou seja, rsync par\u00e2metro pasta-origem\u00a0pasta-destino<\/strong>.<\/p>\n

Para\u00a0conhecer todos os par\u00e2metros do rsync, veja atrav\u00e9s do comando “man rsync”.
\nSe quiser exportar a documenta\u00e7\u00e3o oficial para um arquivo de texto, use o comando \u00a0“man rsync > rsync.txt” (pois a documenta\u00e7\u00e3o tem 3 mil<\/strong> linhas).<\/p>\n

Principais Par\u00e2metros ou “Flags”<\/h4>\n

Aqui vamos analisar o comportamento de 10\u00a0par\u00e2metros:<\/p>\n

-r :<\/strong> Recursiva, ou seja, l\u00ea e opera nas subpastas e conte\u00fados tamb\u00e9m.
\n-a :<\/strong> Archive mode – Recursiva e preserva links simb\u00f3licos, arquivos especiais de dispositivo, hora de modifica\u00e7\u00e3o, o grupo, propriet\u00e1rio e permiss\u00f5es.
\n-v :<\/strong> Aumenta a verbose.
\n-n :<\/strong> O mesmo que o –dry-run (veja mais abaixo).
\n-z :<\/strong> Comprime os dados durante a transfer\u00eancia.
\n-i :<\/strong> Verifica se os dados transferidos no destino s\u00e3o iguais os da origem.
\n-P :<\/strong> o mesmo que –partial ou –progress – mostra o progresso da transfer\u00eancia.
\n–delete :<\/strong> apaga arquivos desejados antes, durante ou ap\u00f3s a tarefa de sincroniza\u00e7\u00e3o.
\n–include :<\/strong> filtro que pode ser usado para que no momento da tarefa que inclui os arquivos especificados.
\n–exclude :<\/strong>\u00a0filtro que pode ser usado para que no momento da tarefa que exclui os arquivos especificados.
\n–dry-run :\u00a0<\/strong>Usado para testar antes o seu comando, mostra o que seria alterado, sem realizar altera\u00e7\u00f5es.<\/p>\n

Laborat\u00f3rio – Usos do Rsync<\/h3>\n

Prepara\u00e7\u00e3o<\/h4>\n

Vamos fazer um lab para testar o funcionamento do Rsync?
\nEnt\u00e3o vamos criar dois diret\u00f3rios de teste e alguns arquivos de teste com os seguintes comandos:<\/p>\n

cd ~\nmkdir dir1\nmkdir dir2\ntouch dir1\/file{1..100}<\/code><\/pre>\n

Agora n\u00f3s temos uma diret\u00f3rio chamado dir1<\/strong> com 100 arquivos nele e o dir2<\/strong> vazio.<\/p>\n

1 – Tranfer\u00eancia Local Recursiva<\/h4>\n

A op\u00e7\u00e3o -r<\/strong> significa recursivo, o qual \u00e9 necess\u00e1rio para fazer o sincronismo do diret\u00f3rios.<\/p>\n

N\u00f3s tamb\u00e9m podemos usar o par\u00e2metro -a<\/strong>.<\/p>\n

rsync -a dir1\/ dir2<\/code><\/pre>\n

O par\u00e2metro -a<\/strong> \u00e9 uma combina\u00e7\u00e3o de op\u00e7\u00f5es, significa “archive” e \u00e9 muito importante pois sincroniza de forma recursiva e preserva links simb\u00f3licos, arquivos especiais de dispositivo, hora de modifica\u00e7\u00e3o, o grupo, propriet\u00e1rio e permiss\u00f5es.<\/strong><\/p>\n

O -a<\/strong> \u00e9 mais comumente usado que o -r<\/strong> e geralmente \u00e9 o que voc\u00ea vai mais precisar usar.<\/p>\n

Uma Nota Importante<\/strong><\/p>\n

Voc\u00ea deve ter notado que h\u00e1 uma barra (\/) no final do primeiro argumento nos comandos acima:<\/p>\n

rsync -a dir1\/<\/span> dir2<\/pre>\n

Isto \u00e9 necess\u00e1rio e significa “o conte\u00fado do dir1”<\/p>\n

A alternativa, sem a barra final, colocaria dir1, incluindo o diret\u00f3rio, dentro dir2. Isso criaria uma hierarquia que se parece com:<\/p>\n

~\/dir2\/dir1\/[files]\n<\/code><\/pre>\n

Por isso, sempre verifique seus argumentos antes de executar um comando rsync.<\/p>\n

Testando um Comando Antes de Rod\u00e1-lo – Com e Sem a Barra<\/h4>\n

O Rsync fornece um m\u00e9todo para fazer isso passando as op\u00e7\u00f5es -n<\/strong> ou –dry-run<\/strong>. O par\u00e2metro\u00a0-v<\/strong> (para detalhado) tamb\u00e9m \u00e9 necess\u00e1rio para obter a sa\u00edda apropriada:<\/p>\n

rsync -anv ~\/dir1\/<\/span> ~\/dir2<\/strong><\/span>\nsending incremental file list\n.\/\nfile1\nfile10\nfile100\nfile11\nfile12...\nsent 1,654 bytes received 319 bytes 3,946.00 bytes\/sec\ntotal size is 0 speedup is 0.00 (DRY RUN)<\/pre>\n

Compare esta sa\u00edda com a sa\u00edda que n\u00f3s temos quando removemos a barra. Repare que agora ele transferiu o diret\u00f3rio todo e n\u00e3o apenas o conte\u00fado.<\/p>\n

rsync -anv ~\/dir1 ~\/dir2<\/strong><\/span>\nsending incremental file list\ndir1\/\ndir1\/file1\ndir1\/file10\ndir1\/file100\ndir1\/file11\ndir1\/file12...\nsent 1,667 bytes received 320 bytes 3,974.00 bytes\/sec\ntotal size is 0 speedup is 0.00 (DRY RUN)<\/pre>\n

2 – Usando o Rsync Via SSH Para Enviar ou Receber Arquivos\/Pastas de Uma M\u00e1quina Remota<\/h4>\n

\"046_Rsync-Server-Your-remote-backup-server2_2\"<\/a> Essa parte \u00e9 muito importante para transferir dados de forma segura, pela sua lan ou pela internet atrav\u00e9s de lugares distantes. Ser\u00e1 necess\u00e1rio apenas que\u00a0voc\u00ea possua\u00a0acesso SSH<\/a><\/span> para a m\u00e1quina remota e rsync instalado em ambos os lados. Se for fazer um rsync remoto (o rsync usa acesso remoto via ssh) de ou para um servidor pela rede:<\/p>\n

Sintaxe usando SSH<\/h4>\n

rsync par\u00e2metro pasta-origem usu\u00e1rio@servidor:\/pasta-destino<\/strong> Se caso o servidor remoto usar outra porta ssh diferente<\/strong> da tradicional 22<\/strong>, deve-se usar o par\u00e2metro ‘ssh -p n\u00famero-da-porta’. Exemplo: rsync -azvP ‘ssh -p 3000’ \/dados\/ fulano@192.168.0.50:\/backup<\/strong><\/p>\n

Push – Enviando Arquivos\/Diret\u00f3rios<\/h4>\n

Depois de ter acesso SSH verificado em entre as duas m\u00e1quinas, voc\u00ea pode sincronizar a pasta dir1<\/strong>\u00a0a um computador remoto usando a seguinte sintaxe (note que n\u00f3s queremos transferir a pasta dir1 inteira, neste caso, portanto, omitiremos a barra \u00e0 direita, ap\u00f3s o “dir1” no comando):<\/p>\n

rsync -a ~\/dir1 username<\/span>@remote_host<\/span>:destination_directory<\/span><\/pre>\n

Isso \u00e9 chamado de uma opera\u00e7\u00e3o de “push”<\/strong>, porque ele empurra um diret\u00f3rio do sistema local para um sistema remoto.<\/p>\n

Obs.<\/strong>\u00a0N\u00e3o precisava, mas eu fiz uma ilustra\u00e7\u00e3o do que acontece, (usando duas m\u00e1quinas com interface gr\u00e1fica, para ficar melhor a visualiza\u00e7\u00e3o), acessando via VNC (apenas para mostrar) uma m\u00e1quina remota em minha lan, e de minha m\u00e1quina local, usei o rsync com ssh para copiar o diret\u00f3rio dir1 para a m\u00e1quina remota.<\/p>\n

“Simple like that!” \ud83d\ude09<\/p>\n

Pull – Puxando Arquivos\/Diret\u00f3rios<\/h4>\n

A opera\u00e7\u00e3o oposta \u00e9 “pull”<\/strong> (puxar). O Pull funciona de modo contr\u00e1rio,\u00a0usado para sincronizar de um diret\u00f3rio remoto para o sistema local. No exemplo,\u00a0o dir1 est\u00e1 no sistema remoto, em vez de nosso sistema local, a sintaxe \u00e9:<\/p>\n

rsync -a username<\/span>@m\u00e1quina-remota<\/span>:\/home\/username\/dir1<\/span> diret\u00f3rio-local-de-sua-m\u00e1quina<\/span><\/pre>\n

Ent\u00e3o usei o comando:<\/p>\n

rsync -a suporte@m\u00e1quina-remota:\/home\/suporte\/Documentos\/pasta_teste\/dir1 \/home\/cleuber\/Desktop\/MAOE\/<\/pre>\n

Assim como o “cp” e ferramentas similares, a fonte \u00e9 sempre o primeiro argumento, e o destino \u00e9 sempre o segundo<\/span>.<\/p>\n

Obs.<\/strong> Novamente ilustrado, desculpem a piadinha, n\u00e3o resisti (risos)<\/p>\n

\"rsync-pull\"<\/a><\/p>\n

Obs. Claro, que se voc\u00ea quiser transferir dados via ssh de uma m\u00e1quina que n\u00e3o esteja na mesma lan e sim atrav\u00e9s da internet, a m\u00e1quina remota ter\u00e1 que ter\u00a0o IP e nome nos servi\u00e7os p\u00fablicos de DNS, tais como o opendns, dns-omatic e etc.<\/p>\n

3 – Compactando<\/h4>\n

Se voc\u00ea estiver transferindo arquivos que n\u00e3o foram compactados anteriormente, como arquivos de texto, voc\u00ea pode reduzir a transfer\u00eancia de rede, adicionando a compress\u00e3o com a op\u00e7\u00e3o -z<\/strong>:
\nObs. Essa compress\u00e3o \u00e9 para a transfer\u00eancia dos arquivos, e n\u00e3o gera um pacote do arquivo (tipo zip, rar, tar).<\/p>\n

rsync -az origem<\/span> destino<\/span><\/pre>\n

4 – Exibindo o Progresso<\/h4>\n

O par\u00e2metro\u00a0-P<\/strong> \u00e9 muito \u00fatil. Ele combina as a\u00e7\u00f5es\u00a0–progress<\/strong> e –partial<\/strong>. A primeira delas mostrar\u00e1\u00a0uma barra de progresso para as transfer\u00eancias e o segundo permite retomar transfer\u00eancias interrompidas:<\/p>\n

rsync -azvP ~\/dir1 ~\/dir2\n<\/pre>\n
sending incremental file list\n.\/\nfile1\n           0 100%    0.00kB\/s    0:00:00 (xfer#1, to-check=99\/101)\nfile10\n           0 100%    0.00kB\/s    0:00:00 (xfer#2, to-check=98\/101)\nfile100\n           0 100%    0.00kB\/s    0:00:00 (xfer#3, to-check=97\/101)\nfile11\n           0 100%    0.00kB\/s    0:00:00 (xfer#4, to-check=96\/101)\n. . .<\/code><\/pre>\n

Se executar o comando novamente, vamos obter uma sa\u00edda mais curta, porque nenhuma mudan\u00e7a foi feita.<\/p>\n

Isto ilustra a capacidade do rsync usar a\u00a0hora\u00a0de modifica\u00e7\u00e3o<\/strong>\u00a0(ou chamado de “time stamp” tamb\u00e9m) para determinar se as altera\u00e7\u00f5es foram feitas.<\/p>\n

rsync -azvP ~\/dir1 ~\/dir2<\/pre>\n
sending incremental file list\n\nsent 818 bytes received 12 bytes 1660.00 bytes\/sec\ntotal size is 0 speedup is 0.00<\/code><\/pre>\n

Podemos atualizar a hora de modifica\u00e7\u00e3o<\/strong> em alguns dos arquivos e ver que rsync inteligentemente re-copia apenas os arquivos alterados:<\/p>\n

touch dir1\/file{1..10}\nrsync -azvP ~\/dir1 ~\/dir2<\/pre>\n
sending incremental file list\nfile1\n           0 100%    0.00kB\/s    0:00:00 (xfer#1, to-check=99\/101)\nfile10\n           0 100%    0.00kB\/s    0:00:00 (xfer#2, to-check=98\/101)\nfile2\n           0 100%    0.00kB\/s    0:00:00 (xfer#3, to-check=87\/101)\nfile3\n           0 100%    0.00kB\/s    0:00:00 (xfer#4, to-check=76\/101)\n. . .<\/code><\/pre>\n

5 – Excluindo Arquivos no Destino, Que N\u00e3o Existem Mais na Origem.<\/h4>\n

Imagine que voc\u00ea j\u00e1 sincronizou a pasta de origem com a de destino, mas ap\u00f3s isso, o conte\u00fado da pasta de origem tenha sido todo apagado.
\nSe isso acontecer, a pasta de destino continuar\u00e1 com os arquivos l\u00e1.<\/p>\n

Se voc\u00ea tem a necessidade n\u00e3o apenas de transferir dados, mas manter a origem e o destino realmente em sincronia, \u00e9 necess\u00e1rio que quando arquivos na origem\u00a0tenham sido removidos, os arquivos do diret\u00f3rio de destino sejam removidos tamb\u00e9m.<\/p>\n

N\u00f3s podemos fazer isso usando a op\u00e7\u00e3o –delete<\/strong>\u00a0que apenas apaga documentos no destino e apenas se eles n\u00e3o estiverem mais na origem.<\/p>\n

Ent\u00e3o abaixo, eu tenho o dir1 (origem) vazio, mas o dir2 (destino) com os 100 arquivos l\u00e1. Com o comando abaixo, ele ir\u00e1 apagar os arquivos no destino, (quando eles j\u00e1 n\u00e3o existirem na origem).<\/p>\n

rsync -azvP --delete ~\/dir1 ~\/dir2<\/pre>\n

Obs.<\/strong> Nesse caso, se a origem ainda tiver os arquivos l\u00e1, e voc\u00ea rodar esse comando, ele apenas copiar\u00e1 os arquivos para o destino novamente<\/strong>, e n\u00e3o apagar\u00e1 nada (pois eles permanecem na origem).<\/p>\n

Agora, apague manualmente os arquivo da origem<\/strong> e rode o comando novamente e perceber\u00e1 que ele os apagar\u00e1 no destino tamb\u00e9m.<\/p>\n

E se por exemplo, voc\u00ea apagar, apenas os 30 primeiros documentos na pasta de origem<\/strong>, e rodar o comando, ele apagar\u00e1\u00a0apenas os mesmos 30 documentos na pasta destino.<\/strong><\/p>\n

Capiche? \ud83d\ude09<\/p>\n

Isso \u00e9 legal se voc\u00ea configurar\u00a0no Cron para rodar o comando rsync com “–delete”, para sincronizar os dois locais, automaticamente dentro de uma agenda que voc\u00ea desejar, como por exemplo, diariamente as 21:00hs. Mas falarei dos agendamentos no Cron um pouco mais abaixo.<\/p>\n

6 – Filtrando Arquivos – Exclude ou Include<\/h4>\n

Se voc\u00ea quiser excluir ou incluir certos arquivos ou diret\u00f3rios localizados dentro de um diret\u00f3rio que voc\u00ea est\u00e1 sincronizando, poder\u00e1 usar as op\u00e7\u00f5es\u00a0–exclude e –include.<\/strong> Com esses dois par\u00e2metros voc\u00ea\u00a0poder\u00e1 incluir ou ignorar arquivos espec\u00edficos durante a sincronia.<\/strong><\/p>\n

Alguns Casos de Uso do Exclude e Include<\/h4>\n

Excluir\u00a0uma pasta espec\u00edfica.<\/h4>\n

Supomos que eu quero excluir do backup uma subpasta chamada “teste”:<\/p>\n

–exclude ‘teste’ (sem digitar o caminho, pois o caminho de origem j\u00e1 \u00e9 descrito logo ap\u00f3s).<\/p>\n

Se houver v\u00e1rias pastas com o nome ‘teste’, como ‘teste1′, teste2′, e teste3’, basta usar o caractere ‘*’:<\/p>\n

–exclude ‘teste*’<\/p>\n

rsync -azvP --exclude 'teste*' ~\/dir1 ~\/dir2<\/pre>\n

Excluir um arquivo\u00a0espec\u00edfico<\/h4>\n
rsync -avz --exclude 'dir1\/file3.txt' ~\/dir1\/ ~\/dir2<\/pre>\n

Tamb\u00e9m \u00e9 poss\u00edvel criar uma lista de exclus\u00f5es (com pastas e arquivos na lista)<\/h4>\n

Voc\u00ea pode criar um arquivo de texto chamado “exclude.txt”. E vamos dizer que eu salvei este arquivo em minha pasta “home”, e com o seguinte conte\u00fado:<\/p>\n

file1.txt\n\/home\/cleuber\/dir1\/file4.txt\n\/home\/cleuber\/dir1\/teste\/<\/pre>\n

Da\u00ed o comando ficaria assim:<\/p>\n

rsync -azvP --exclude-from='\/home\/cleuber\/exclude.txt' ~\/dir1 ~\/dir2<\/pre>\n

Exclude e Include Juntos em um Rsync de pull remoto.<\/h4>\n

Neste exemplo, o rsync, ir\u00e1 fazer um pull (puxar), copiar do servidor remoto o conte\u00fado da pasta \/var\/log e colar esse conte\u00fado na pasta local \/root\/log, e ir\u00e1 incluir apenas os arquivos quem come\u00e7arem com a letra ‘M’ e excluir todos os outros arquivos e diret\u00f3rios do sincronismo. Usaremos a combina\u00e7\u00e3o de flags “avze”<\/p>\n

rsync -avze ssh --include 'm*' --exclude '*' root@192.168.0.25:\/var\/log\/ \/root\/log<\/pre>\n

Rsync e Cron – Automatizando Backupes<\/h2>\n

O Rsync que rodamos aqui nos testes foram feitos manualmente por n\u00f3s e executou corretamente conforme nossa necessidade.<\/p>\n

Agora, imagine que voc\u00ea queira que o rsync sincronize\u00a0os diret\u00f3rios origem e destino, mas rodando automaticamente dentro de uma agenda. Isso \u00e9 poss\u00edvel!
\nBasta adicionar um agendamento usando o Cron. Muito legal n\u00e3o \u00e9?!<\/p>\n

Obs. Autentica\u00e7\u00e3o em\u00a0m\u00e1quinas remotas via ssh:<\/strong><\/p>\n

O comando do rsync\u00a0configurado dentro do cron, tem um detalhe. \u00c9 que quando voc\u00ea roda o rsync manualmente via ssh em m\u00e1quinas remotas, ser\u00e1 solicitada uma senha, que voc\u00ea dever\u00e1 digitar<\/strong>.<\/p>\n

Mas agendando via cron para rodar em um hor\u00e1rio que voc\u00ea n\u00e3o estar\u00e1 presente, a tarefa n\u00e3o<\/strong> se concluir\u00e1 por causa da pend\u00eancia da entrada da senha, mas eu tenho a solu\u00e7\u00e3o!<\/strong><\/p>\n

Autorizando Acesso SSH Usando Chaves – Sem Senha<\/h3>\n

\"chaves1\"<\/a><\/p>\n

Para fazer\u00a0isso, basta autorizar a m\u00e1quina destino\u00a0no servidor\u00a0origem, para que a senha do acesso ssh n\u00e3o seja solicitada.
\nVoc\u00ea pode at\u00e9 pensar que isso seja inseguro, mas n\u00e3o \u00e9, pois na verdade o acesso via SSH ser\u00e1 realizado atrav\u00e9s da leitura de chave p\u00fablica<\/strong>, estabelecendo uma confian\u00e7a entre o servidor e o cliente, permitindo o acesso somente quando validadas as chaves.\u00a0Para fazer isso leia este artigo:<\/p>\n

Autorizando Acesso SSH Com Chaves \u2013 Sem Solicitar Senha<\/a><\/span><\/h4>\n

Se seguiu o tutorial do link corretamente, agora n\u00e3o\u00a0aparecer\u00e1 mais o pedido de digita\u00e7\u00e3o da senha no acesso ssh ao servidor destino configurado<\/span>, e voc\u00ea poder\u00e1 adicionar no Cron seu rsync remoto via ssh sem problemas.<\/p>\n

5 Casos de Uso do Rsync e Cron Juntos<\/h2>\n

Usar o Rsync e o Cron pode ser muito \u00fatil. Vou descrever 4\u00a0casos de uso<\/strong>, e a jun\u00e7\u00e3o de casos, para ter por exemplo, no \u00faltimo caso, uma automatiza\u00e7\u00e3o do backup de um servidor, que ir\u00e1 rodar uma compacta\u00e7\u00e3o dos arquivos alvo, criar um arquivo s\u00f3 compactado, com\u00a0a data do backup no nome do arquivo e enviado para outra m\u00e1quina remota diariamente as 2:00 da manh\u00e3.
\nMuito chique n\u00e3o \u00e9?!<\/p>\n

Uma vez configurado um procedimento desse, voc\u00ea n\u00e3o precisar\u00e1 fazer mais nada, a n\u00e3o ser checar se os arquivos est\u00e3o l\u00e1 e de tempos em tempos apagar os backups mais antigos que n\u00e3o desejar.<\/p>\n

Saiba mais sobre o Cron:\u00a0Cron \u2013 (Agendador de Tarefas do Linux<\/a>).<\/span><\/span>
\nSaiba mais sobre
script de compacta\u00e7\u00e3o e agendamentos no Cron<\/a><\/span><\/span>.<\/p>\n

Caso\u00a01 – Em 1 Passo<\/h3>\n

Agendando no Cron com comando inteiro de RSync remoto<\/span>, buscando todos os arquivos, sem compacta\u00e7\u00e3o.<\/h4>\n

Vamos fazer com que o Cron rode um comando de rsync em um cliente,\u00a0para puxar\u00a0(pull)<\/strong>, arquivos\u00a0de um servidor remoto, e salv\u00e1-los localmente, diariamente as 2:00 da manh\u00e3.
\nQuero copiar o conte\u00fado da pasta \/empresa\/contabilidade<\/strong>\u00a0que est\u00e1 em um servidor remoto, e col\u00e1-lo na minha pasta local ~\/Documentos\/backupes\/contabilidade<\/strong>.<\/p>\n

Vamos editar o crontab com o comando:<\/p>\n

crontab -e<\/pre>\n

Obs. Se voc\u00ea nunca usou o Cron, ele ir\u00e1 pedir na primeira vez que voc\u00ea escolha o editor de texto que prefere usar para edit\u00e1-lo. Eu gosto do nano, pois o considero mais pr\u00e1tico.<\/p>\n

Agora, adicione a seguinte linha em seu cron:<\/p>\n

01 02 * * * rsync -avz usu\u00e1rio@ip-do-servidor:\/empresa\/contabilidade ~\/Documentos\/backupes\/contabilidade<\/pre>\n

Sintaxe do Cron<\/h4>\n
*  *  *  *  *       comando<\/span> a ser executado\n-  -  -  -  -\n|  |  |  |  +-----  dia da semana    (0<\/span> -  6<\/span>) (domingo=0<\/span>)\n|  |  |  +--------  m\u00eas              (1<\/span> - 12<\/span>)\n|  |  +-----------  dia do m\u00eas       (1<\/span> - 31<\/span>)\n|  +--------------  hora             (0<\/span> - 23<\/span>)\n+-----------------  minuto           (0<\/span> - 59<\/span>)<\/code><\/pre>\n

Caso 2 – Em 2 Passos<\/h3>\n

Criando script de envio de arquivos sem compacta\u00e7\u00e3o e depois agendando a execu\u00e7\u00e3o dele no cron<\/h4>\n

Passo 1 –\u00a0Criar script de envio de arquivos –\u00a0RSync remoto, buscando todos os arquivos, sem compacta\u00e7\u00e3o.\u00a0
\n<\/strong>Passo 2 – Agendando execu\u00e7\u00e3o do script no Cron<\/p>\n

Passo 1 – Criar script de envio de arquivos<\/strong><\/p>\n

Voc\u00ea poder\u00e1 criar um script de backup e no cron, ao inv\u00e9s do comando do rsync, bastar\u00e1 colocar o caminho do seu arquivo de script.<\/p>\n

Abra seu editor de texto favorito e crie um script como esse:<\/p>\n

#!\/bin\/bash\nrsync -avz usu\u00e1rio@ip-do-servidor:\/empresa\/contabilidade ~\/Documentos\/backupes\/contabilidade<\/pre>\n

Agora, salve, feche e d\u00ea permiss\u00e3o de execu\u00e7\u00e3o do seu script. (eu salvei na raiz e dei o nome de backup-contabilidade).<\/p>\n

sudo chmod +x \/backup-contabilidade.sh<\/pre>\n

Passo 2 – Agendando no Cron a execu\u00e7\u00e3o do script<\/strong><\/p>\n

E depois no Cron,<\/p>\n

crontab -e<\/pre>\n

… ao inv\u00e9s de inserir o comando todo, ficaria apenas assim:<\/p>\n

01 02 * * * \/backup-contabilidade.sh<\/pre>\n

Mais limpo n\u00e3o \u00e9?!<\/p>\n

Caso 3 – Em 1 Passo<\/h3>\n

Agendando Atrav\u00e9s das\u00a0Pastas do\u00a0Cron<\/span>,\u00a0Usando script<\/span>\u00a0de RSync remoto, buscando todos os arquivos, sem compacta\u00e7\u00e3o.<\/h4>\n

Mas se quiser fazer algo mais simples, ou seja, que rode de hora em hora, 1 vez semanalmente, mensalmente e assim por diante, existe um meio bem simples. E nesse caso, n\u00e3o use o \u201ccrontab -e\u201d.<\/strong><\/p>\n

Apenas copie e cole seu\u00a0script de backup <\/strong>(previamente criado no caso2) em uma das pastas do cron espec\u00edficas que o rodar\u00e3o conforme o nome de cada pasta.
\nTemos as seguintes pastas na estrutura de arquivos do Cron:<\/p>\n

cd \/etc\/<\/p>\n

cron.hourly \u00a0 \u00a0 \u00a0=> de hora em hora
\ncron.daily \u00a0 \u00a0 \u00a0 \u00a0 => diariamente
\ncron.weekly \u00a0 \u00a0 \u00a0=> semanalmente
\ncron.monthly \u00a0 => mensalmente<\/p>\n

Basta colar seu script em uma\u00a0delas de sua escolha e pronto.<\/p>\n

sudo cp \/etc\/cron.a-pasta-de-agendamento-que-quiser<\/pre>\n

Caso 4 – Em 4 Passos<\/h3>\n

Vamos fazer um script de backup com compacta\u00e7\u00e3o e\u00a0timestamp no nome do arquivo e agendar a execu\u00e7\u00e3o dele no cron. E vamos fazer um script de transfer\u00eancia para outro servidor do backup compactado que foi realizado e agendar a execu\u00e7\u00e3o dele.<\/p>\n

Passo 1 – Criando Script de Compacta\u00e7\u00e3o de seu backup com Tar.Gz,\u00a0usando Time Stamp.
\nPasso 2 – Agendando no Cron Usando o Script de Compacta\u00e7\u00e3o e Salvando em diret\u00f3rio local de backup.
\nPasso 3 – Criar Script de Envio usando o Rsync remoto<\/span> para m\u00e1quina cliente.
\nPasso 4 –\u00a0Agendando no Cron Usando o previamente criado script\u00a0de RSync remoto<\/span> dos arquivos compactados.<\/p>\n

Passo 1 \u00a0– Criando Script de\u00a0Compacta\u00e7\u00e3o<\/h4>\n

Voc\u00ea pode tamb\u00e9m, atrav\u00e9s de um script, previamente compactar no servidor remoto, seus arquivos de backup, colocar o pacote de backup em outra pasta com timestamp no nome, ou seja, com a data de backup gravado no nome do arquivo compactado, e ent\u00e3o agendar via cron para um hor\u00e1rio, e depois agendar via cron em um hor\u00e1rio posterior transferi-lo para outro lugar.<\/p>\n

1 –<\/strong> Acesse seu servidor remoto siga os passos:<\/p>\n

2 –<\/strong> Vamos criar uma pasta onde salvar os arquivos compactados com o “sudo\u00a0mkdir \/backupes”.<\/p>\n

3 –<\/strong> Agora, use seu editor de texto para criar\u00a0um script de compacta\u00e7\u00e3o como este abaixo:<\/p>\n

#!\/bin\/bash\n #Prop\u00f3sito\u00a0=\u00a0Backup\u00a0de\u00a0Arquivos em \"\/empresa\/contabilidade\"\n # START \n TIME=`date\u00a0+%b-%d-%y      `\u00a0\u00a0\u00a0 \u00a0#\u00a0Este\u00a0comando\u00a0ir\u00e1\u00a0adicionar\u00a0a\u00a0data\u00a0no\u00a0Nome\u00a0do\u00a0Arquivo\u00a0de\u00a0Backup. \n FILENAME=backup-$TIME.tar.gz   \u00a0#\u00a0Aqui\u00a0eu\u00a0defino\u00a0o\u00a0formato\u00a0do\u00a0nome\u00a0do\u00a0arquivo\u00a0de\u00a0backup. \n SRCDIR=\/empresa\/contabilidade\u00a0  <\/span>#\u00a0Local\u00a0Fonte -\u00a0onde\u00a0est\u00e3o\u00a0os\u00a0arquivos\u00a0a\u00a0serem\u00a0feitos\u00a0backup. \n DESDIR=\/backupes \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0    #\u00a0Local\u00a0Destino\u00a0-\u00a0onde\u00a0o\u00a0Backup\u00a0ser\u00e1\u00a0salvo. \n tar\u00a0-cpzf\u00a0$DESDIR\/$FILENAME\u00a0$SRCDIR \n#END<\/pre>\n

4 – <\/strong>Salve seu script e d\u00ea permiss\u00e3o de execu\u00e7\u00e3o, (no meu caso salvei como “compact-files-cont.sh”)<\/p>\n

sudo chmod +x \/compact-files-cont.sh<\/pre>\n

Passo 2 – Agendando no Cron para realizar o backup local compactado a 1:00 da manh\u00e3.<\/h4>\n

E agendamos no Cron para rodar diariamente a 1:00 da manh\u00e3<\/strong>:<\/p>\n

crontab -e<\/pre>\n
01 01 * * * \/compact-files-cont.sh<\/pre>\n

Agora, teremos, (depois da execu\u00e7\u00e3o do script pelo cron), um arquivo apenas, compactado e colocado na pasta da raiz \/backupes.
\nO arquivo ter\u00e1 o nome nesse formato: “backup-data-do-backup.tar.gz”<\/p>\n

Passo 3 – Criando Script de Rsync para Buscar Backup Compactado.<\/h4>\n

A para transmitir esse backup para um cliente, seja ele\u00a0uma esta\u00e7\u00e3o ou um outro\u00a0servidor, via pull (puxar)<\/strong>, basta, no cliente, fazer o mesmo que fizemos antes, alterando apenas a pasta que ele ir\u00e1 buscar do destino.<\/p>\n

Crie um script em seu cliente:<\/p>\n

#!\/bin\/bash\nrsync -avz usu\u00e1rio@ip-do-servidor:\/backupes ~\/Documentos\/backupes\/contabilidade<\/pre>\n

Agora, salve, feche e d\u00ea permiss\u00e3o de execu\u00e7\u00e3o do seu script. (eu salvei na raiz e dei o nome de backup-contabilidade).<\/p>\n

sudo chmod +x \/backup-contabilidade.sh<\/pre>\n

Passo 4 – Agendando no Cron o Script de Rsync para buscar backup dos arquivos compactados as 2:00 da manh\u00e3.<\/h4>\n

E depois no Cron, agende para rodar as 2:00 da manh\u00e3<\/strong>.<\/p>\n

crontab -e<\/pre>\n
01 02 * * * \/backup-contabilidade.sh<\/pre>\n

UFA!!!<\/p>\n

Caso 5 – Rodando Comando Remoto Via SSH<\/h3>\n

Aqui apenas uma observa\u00e7\u00e3o;<\/p>\n

Caso haja alguma dificuldade do Rsync ser executado\u00a0remotamente, ou seja, de uma para outra m\u00e1quina em outro IP, voc\u00ea pode usar o ssh para rodar um comando de rsync (ou qualquer outro comando sobre ssh). Nesse contexto, quando voc\u00ea roda um comando via ssh com a sintaxe “ssh usu\u00e1rio@server comando”<\/em><\/span>, o comando ser\u00e1 executado no destino remoto e voc\u00ea poder\u00e1 ver a sa\u00edda do comando em seu terminal, e tudo isso, sem que voc\u00ea fa\u00e7a login no servidor\u00a0remoto. O ssh ent\u00e3o \u00e9 usado apenas para enviar o comando e ver a sa\u00edda dele, e isso \u00e9 muito \u00fatil.<\/p>\n

Exemplo do Rsync sobre ssh:<\/p>\n

ssh user@server-origem rsync -arzvP \/pasta-a-se-fazer-backup user@server-destino:\/pasta-de-destino-do-backup\/<\/pre>\n

Voc\u00ea pode ent\u00e3o rodar esse comando diretamente ou criar um script com essa sintaxe e nos dois casos, agendar no Cron se desejar (com comando direto ou apontando para um script), mas lembre-se que para que rode sozinho de forma agendada no Cron \u00e9 preciso que n\u00e3o se exija senha de autentica\u00e7\u00e3o via ssh entre um servidor outro<\/span>, como expliquei\u00a0no artigo que mostrei\u00a0mais acima sobre usar chaves de autentica\u00e7\u00e3o<\/a><\/span><\/span>.<\/p>\n

Visualizando o log de tarefas do Cron<\/h3>\n

Para ver se as tarefas rodaram adequadamente atrav\u00e9s da an\u00e1lise de logs, d\u00ea uma olhada neste artigo:
\n
https:\/\/cleuber.com.br\/index.php\/2016\/01\/19\/gerenciando-os-logs-do-cron<\/a><\/span><\/p>\n

Conclus\u00e3o<\/h3>\n

Rsync pode simplificar as transfer\u00eancias de arquivos atrav\u00e9s de conex\u00f5es de rede e adicionar robustez a sincroniza\u00e7\u00e3o de diret\u00f3rios.<\/p>\n

A flexibilidade do rsync o torna uma boa op\u00e7\u00e3o para muitas opera\u00e7\u00f5es diferentes no\u00a0n\u00edvel de arquivos.
\nO dom\u00ednio da ferramenta\u00a0Rsync lhe permitir\u00e1 projetar opera\u00e7\u00f5es de backup complexos<\/strong> e obter o controle refinado sobre o que \u00e9 transferido e como<\/strong>.<\/p>\n

\u00c9 isso a\u00ed pessoal,<\/p>\n

Tem mais alguma configura\u00e7\u00e3o bacana a sugerir? Alguma corre\u00e7\u00e3o, Gostou? Comente a\u00ed e curta a nossa p\u00e1gina.<\/p>\n

Abra\u00e7os,<\/p>\n

Cleuber<\/p>\n","protected":false},"excerpt":{"rendered":"

Ol\u00e1\u00a0pessoal, Hoje, vou postar este\u00a0tutorial sobre o RSync, cobrindo\u00a0o uso b\u00e1sico deste poderoso utilit\u00e1rio. O Rsync \u00e9 mais do que um comando ou um simples\u00a0programa. Ele pode te oferecer funcionalidades poderosas como a de sistemas de backup. Imagine que voc\u00ea tenha dois servidores de arquivos, um em seu local, e outro em outro local, (como …<\/p>\n","protected":false},"author":1,"featured_media":9346,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"nf_dc_page":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[51,4,348],"tags":[415,495,501,365],"class_list":["post-9338","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dicas-e-tutoriais","category-tutoriais-linux","category-servidores-linux","tag-backup","tag-cron","tag-rsync","tag-ssh"],"_links":{"self":[{"href":"https:\/\/cleuber.com.br\/index.php\/wp-json\/wp\/v2\/posts\/9338","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cleuber.com.br\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cleuber.com.br\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cleuber.com.br\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cleuber.com.br\/index.php\/wp-json\/wp\/v2\/comments?post=9338"}],"version-history":[{"count":0,"href":"https:\/\/cleuber.com.br\/index.php\/wp-json\/wp\/v2\/posts\/9338\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cleuber.com.br\/index.php\/wp-json\/wp\/v2\/media\/9346"}],"wp:attachment":[{"href":"https:\/\/cleuber.com.br\/index.php\/wp-json\/wp\/v2\/media?parent=9338"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cleuber.com.br\/index.php\/wp-json\/wp\/v2\/categories?post=9338"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cleuber.com.br\/index.php\/wp-json\/wp\/v2\/tags?post=9338"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}

\"Rsync-push\"<\/a><\/p>\n