crontab de backup para arquivos específicos

Iniciado por marcoscm, 26 de Fevereiro de 2007, 13:20

tópico anterior - próximo tópico

marcoscm

Boa tarde! Não sei se este é o local mais indicado à pergunta, mas foi o mais relacionado que encontrei. Então, a situação é a seguinte:

- Tenho um diretório com vários sub-diretórios e, dentro de cada um desses sub-diretórios encontram-se arquivos .INI que são de EXTREMA importância para o funcionamento de um serviço proprietário. O fato de o diretório principal ter, juntamente com seus sub-diretórios, em torno de 18Gb de espaço total, torna inviável criar um .TAR a cada hora, ou em um intervalo regular menor, pois trata-se de uma aplicação de risco.

Gostaria de saber se há, usando o comando TAR ou qualquer outro que se assemelhe a ele, uma forma de criar uma linha de comando para os arquivos .INI serem backupeados de tempos em tempos (somados, os arquivos INI não chegam a 2Mb, o que deixa a tarefa muito mais simples de ser executada). Algo como isto:

0-55/5 * * * * tar -cf /dir/*.ini /home/marcoscm/inibkp.tar

Ou que fosse simples de ser feito para colocar na cron.

Agradeço desde já à prestatividade do fórum!

Lamego

Uma forma fácil:
find /dir -name "*.ini" | xargs tar czvf  /home/marcoscm/inibkp.tar

Notas:
Se forem muitos .ini ele vai erro de demasiados argumentos passados ao tar .
Tem que colocar um espaço no final da linha.
João Luís Marques Pinto
Mais programs e jogos para o Ubuntu

marcoscm

Lamego, obrigado pela rapidez!
Devem ser em torno de 500 *.ini.

Não cheguei a testar o comando ainda, pois vou replicar o diretório para outra máquina, deixando a produção solta, por enquanto.

marcoscm

Citação de: Lamego online 26 de Fevereiro de 2007, 13:35
Uma forma fácil:
find /dir -name "*.ini" | xargs tar czvf  /home/marcoscm/inibkp.tar

Funcionou perfeitamente, Lamego!  ;D

Muitíssimo obrigado! Não achava nada similar, e já era mais do que na hora de conseguir fazer esse backup de uma forma ágil. A prontidão neste fórum me deixa feliz em fazer parte dele, apesar de ainda ter ajudado muito pouco aos outros.

Novamente, obrigado.  ::)

marcoscm

#4
Funcionou perfeitamente, mas em diretórios que não tenham espaçamento no nome, como por exemplo:
/var/log/apache


Mas no caso de diretórios com espaços, daí o argumento deve ser outro, como no exemplo:
/var/log/my log folder/*.log


No segundo caso, simplesmente o retorno do xargs fica incompleto. Minha saída foi usar o parâmetro -0, deixando o comando como no exemplo abaixo:
find /dados/postgre/foundersearch/data/ -name '*.ini' | xargs -0 tar -zcvf teste.tar


O meu problema, agora, é que imagino que a saída de dados tenha sido muito grande para a manipulação (corrijam-me se estiver equivocado). O resultado do comando acima foi:
Cannot stat: File name too long
tar: Error exit delayed from previous errors


Alguma tip na manga?  ??? :-\

warlinux

Entranto meio de gaiato no assunto.

Talvez seria uma solução você copiar esses arquivos para um outro diretorio e depois compactar, será que não resolveria ?

Vou ver se acho alguma coisa melhor e posto.

Blz

"O difícil é aprender a ler, o resto está escrito"
Tutorial de instalação Debian Netinstall
http://warlinux.blogspot.com

marcoscm

Citação de: warlinux online 28 de Fevereiro de 2007, 11:00
Entranto meio de gaiato no assunto.

Talvez seria uma solução você copiar esses arquivos para um outro diretorio e depois compactar, será que não resolveria ?

Vou ver se acho alguma coisa melhor e posto.

Blz
warlinux, agradeço a prontidão!

Já pensei na hipótese de colocar em outro diretório, mas ainda não levei isso a cabo. E o mais interessante seria ter os INIs em um único lugar, ao invés de aumentar o número de passos na cron. A solução pode envolver qualquer outra forma de compactação, sendo ela RAR, 7z, bzip2, ou o que houver disponível, desde que a estrutura de diretórios seja preservada (minha opção pelo TAR foi feita exatamente por saber que ele preserva o caminho absoluto do arquivo).

marcoscm

Parece que vou ter de continuar com um backup monstro mesmo.

Estou procurando outra solução e, se encontrar algo, posto aqui para vocês!

marcoscm

Ao(s) moderador(es): se possível, troquem este tópico de lugar.
"Aplicativos" não é bem o escopo do crontab (agora que fui me tocar!)

Aos demais: consegui encontrar uma solução para o problema de espaços nos sub-diretórios! O comando para isso é:
find /diretorio/para encontrar/os seus/arquivos -name '*.ini' -exec tar -rvf arquivo_de_backup.tar {} \;

O próprio find é capaz de executar o comando, sem concatenar comandos entre ele (como estava sendo feito com o xargs, até poucos posts atrás). As opções do TAR, apesar de estarem no manual, são listadas abaixo:
-r appenda [insere] arquivos ao final do pacote, ou seja, ele só irá "agigantar" (desculpem mas não achei melhor termo);
-v dará um verbose para o comando, que mostrará todos os arquivos que estão sendo copiados para o pacote. Prefiro usar essa opção, pois estou gerando LOG dos arquivos incluídos dentro do pacotão;
-f porquê estamos trabalhando com arquivos (files);
{} usará a sequência encontrada pelo find;
\; irá pular uma linha, fazendo com que cada retorno do find seja tratado como um comando único.

Bom, é isso! Espero que ajude quem precisar de algo similar.
Não é corriqueiro, mas com alguém que conhece bem a área de backup (obrigado pela ajuda, Paulista! :D), ficou fácil!  ;D

warlinux

Putz cara Parabéns,

Pela solução do problema, e pela excelente explicação.

Se todas as soluções fossem postadas dessa forma os Foruns,
seriam ainda melhor.

Ah !!!  que bom seria se todo mundo que conseguisse
resolver seus problemas coloca-sem as soluções.

Falow,

Abraços,

E desculpa por não poder ajudar mais !!!!

"O difícil é aprender a ler, o resto está escrito"
Tutorial de instalação Debian Netinstall
http://warlinux.blogspot.com

marcoscm

Citação de: warlinux online 06 de Março de 2007, 11:08
Putz cara Parabéns,

Pela solução do problema, e pela excelente explicação.

Se todas as soluções fossem postadas dessa forma os Foruns,
seriam ainda melhor.

Ah !!!  que bom seria se todo mundo que conseguisse
resolver seus problemas coloca-sem as soluções.

Falow,
Abraços,
E desculpa por não poder ajudar mais !!!!

warlinux: Você se prontificou a ajudar, e isso já mostra um mínimo de interesse.

E quanto à solução, também fiz isso para que, se um dia precisar relembrar dos comandos, posso usar o forum como fonte de pesquisa, além do quê, se houver alguém com o mesmo problema, já mando direto para a página, assim o panorama do meu problema será entendido na totalidade, o que me evitará maiores explicações. Na verdade é um trabalho feito uma única vez, ao invés de ter de ensinar todas as vezes que alguém precisar. "Uma mão lava a outra", como já dizia o ditado! :)

E a solução foi até mais simples do que eu pensei. Conto também, com um script de checagem e informações adicionais rodando, por conta desse bendito comando do find. Em resumo, me ajudou horrores esse comando! ;D