Crontab – agendando meus backups

Crontab – agendando meus backups

Quero fazer um backup toda sexta-feira à noite (não, essa não é toda a rotina de backup, apenas parte dela). O backup de cada sexta-feira à noite não será substituído até 4 semanas depois. Então, essencialmente, tenho quatro backups rotativos: Semana1, Semana2, Semana3 e Semana4.

Agora, preciso que o script de backup da semana 1 seja executado a cada 4 semanas. Mas também quero que o script da semana 2 seja executado a cada quatro semanas. Eu sei que posso dizer ao crontab para executar algo a cada X semanas/dias/horas/o que for. No entanto, como faço para configurá-lo para que cada um desses quatro scripts realmente seja executado em semanas diferentes, como evito que todos os quatro scripts sejam executados na mesma noite e, em seguida, aguarde obedientemente por semanas apenas paratodosCorra novamente?

Responder1

em vez de projetar rotinas de backup 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 tarefas de backup de quase todas as maneiras que você desejar.

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

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

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

Responder2

Acho que a resposta de Frank é a melhor, mas para fazer o que você descreve, você pode fazer um cronjob para fazer backup todas as sextas-feiras e depois usar a rotação de log para manter as últimas quatro cópias. Ou procure qualquer backup com mais de quatro semanas.

Responder3

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

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

(problema estúpido de formatação, preciso colocar texto fictício 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 /grupo/de /diretórios

Como alternativa, basta usar um sufixo de nome de arquivo com a data:

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

em seguida, execute uma localização em seu script que excluirá os arquivos de backup com mais de 28 dias:

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

De qualquer forma, não sobrecarregue o cron com esse tipo de complexidade. Lide com isso no script, que provavelmente é mais capaz de lidar com a complexidade.

Responder4

Duas alternativas:

  • Agende um script para execução todas as sextas-feiras que monitore qual trabalho foi executado pela última vez e execute o próximo trabalho na sequência.

ou:

  • Programe a semana 1 para ser executada nos dias 1 a 7 do mês e somente às sextas-feiras.
  • Programe a semana 2 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 lhe dá uma boa ideiaperfeitobackup - haverá momentos em que você perderá uma semana de backup (quando o dia 29/30/31 cair em uma sexta-feira)

Esse tipo de cálculo é exatamente o motivo pelo qual, tantoDiversãocomo é fazer tudo sozinho, você acabará mais à frente usando uma ferramenta de backup adequada, como amanda ou bacula, comoFrank sugere.

informação relacionada