Crontab - agendando meus backups

1

Eu quero fazer um backup toda sexta-feira à noite (não, essa não é a rotina de backup inteira, apenas parte dela). O backup de cada sexta-feira à noite não será sobrescrito até 4 semanas depois. Então, essencialmente, eu tenho quatro backups revolvendo: Week1, week2, week3 e week4.

Agora, preciso que o script de backup week1 seja executado a cada 4 semanas. Mas também quero que o roteiro da week2 seja veiculado a cada quatro semanas. Eu sei que posso dizer ao crontab para executar algo a cada X semanas / dias / horas / qualquer coisa. No entanto, como faço para configurá-lo para que cada um desses quatro scripts sejam executados em semanas diferentes, como evito que todos os 4 scripts sejam executados na mesma noite, e então espere por semanas apenas para todos executar de novo?

    
por Garfonzo 26.11.2011 / 07:15

4 respostas

4

em vez de projetar rotinas de backups tão complexas, considere usar o Bacula, que é um software de código aberto gratuito de classe empresarial. O Bacula é muito flexível e pode automatizar trabalhos de backup de praticamente todas as maneiras possíveis.

Mesmo que você consiga fazer sua solução MANUAL, há muitas desvantagens:

  • Erros de rastreamento seriam um grande problema
  • Acompanhamento de trabalhos seria uma dor de cabeça
  • configuração manual sempre precisa de monitoramento constante

O melhor administrador de sistemas é aquele que automatiza tudo e relaxa.

    
por 26.11.2011 / 07:24
1

Eu acho que a resposta de Frank é a melhor, mas para fazer o que você descreve, você pode ter um cronjob para fazer o backup toda sexta-feira e depois usar o log rotate para manter as últimas quatro cópias. Ou procure por um backup com mais de quatro semanas.

    
por 26.11.2011 / 08:37
1

Uma alternativa: coloque a complexidade em seu script, pois é mais capaz de lidar com esse tipo de complexidade do que o cron. Então (assumindo o bash):

  • Peça ao seu cron job o mesmo script toda sexta-feira.
  • Modifique seu script para fornecer o módulo 4 das semanas desde a época:

(problema de formatação estúpida, precisa colocar texto falso aqui)

epochsecs='date +%s'   # second since epoch

e

weeknum='expr $epochsecs / 86400 / 7 % 4'  # weeks since epoch, modulo 4
  • Use esse número como parte do nome do arquivo de backup.

    backupfile = / caminho / para / backup / arquivo. $ weeknum

  • Substitua os arquivos de backup antigos.

    rm $ backupfile tar czvf $ backupfile / bunch / of / directories

Como alternativa, use apenas um sufixo de nome de arquivo com a data:

backupfile=/path/to/backup/file.'date +%Y-%m-%d'

em seguida, execute uma pesquisa no seu script que excluirá arquivos de backup com mais de 28 dias:

find /path/to/backup -maxdepth 1 -ctime +28 -delete

Em qualquer caso, não sobrecarregue o cron com esse tipo de complexidade. Lide com o script, que provavelmente é mais capaz de lidar com a complexidade.

    
por 26.11.2011 / 15:11
0

Duas alternativas:

  • Agende um script para ser executado toda sexta-feira, que controla o trabalho que foi executado pela última vez e executa o próximo trabalho na sequência.

ou:

  • Agende a semana1 para ser exibida nos dias de 1 a 7 do mês e apenas às sextas-feiras.
  • Agende a semana2 para ser executada nos dias 8 a 14 do mês e somente às sextas-feiras.
  • ... e assim por diante.
  • Você notará que isso não oferece um backup perfeito - haverá momentos em que você perderá uma semana de backup (quando o dia 29/30/31 cair na sexta-feira)

Este tipo de cálculo é exatamente o porquê, tanto Fun como é fazer tudo sozinho, você terminará mais à frente usando uma ferramenta de backup adequada, como amanda ou bacula, como Frank sugere .

    
por 26.11.2011 / 08:24

Tags