Cron job “if-unless” estrutura?

2

Gostaria de configurar esta rotina de backup de banco de dados com o cron:

  • Todo mês no primeiro, faça um backup completo
  • Todos os domingos da semana, faça um backup incremental - a menos que seja o primeiro
  • Todos os dias da semana, faça um backup delta incremental - a menos que seja o primeiro ou domingo

O banco de dados é o DB2, caso alguém se pergunte. "Completo" significa completo, "incremental" significa incremental cumulativo e "incremental delta" significa "incremental não cumulativo". O cenário de restauração de pior caso seria "completo + incremental + 6 deltas".

Isso é o que eu tentei:

# monthly
0  0  1     *  *    ("do full backup") 
# weekly
0  0  2-31  *  0    ("do incremental backup")
# daily
0  0  2-31  *  1-6  ("do incremental delta backup") 

... esperando que a segunda linha significasse "fazer backup no domingo, mas apenas se a data estiver entre o dia 2 e o dia 31". Acontece cron não e seus argumentos de tempo, mas ORs-los. Assim, a meia-noite entre terça-feira 18 e quarta-feira 19, tanto um backup diário e semanal foi posta em movimento, independentemente de não ser domingo. Aliás, o diário "veio primeiro" e bloqueou o semanário.

Agora, eu poderia mexer com o tempo para que, durante o curso do dia, o backup mensal sempre comece antes do semanal, comece antes do dia (por exemplo, 00.01, 00.02 e 00.03), fazendo uso do "bloqueio" "fenômeno para alcançar meu objetivo. Isso é feio, porém, e de vez em quando eu teria que lidar com a saída de erro que não é realmente um erro (um backup bloqueado).

Além disso, eu poderia basear meu esquema apenas no dia dos meses. Mas um backup completo sobrecarrega os recursos, então meus usuários realmente gostariam que o backup completo fosse executado no fim de semana.

Alguma sugestão que não requer scripts? Eu gostaria de manter a configuração muito básica para facilitar o uso e a compreensão futuros. Além disso, diferentes grupos de usuários vão querer políticas de backup ligeiramente diferentes, e eu não gosto de escrever pequenas diferenças.

Atenciosamente, Torsten

    
por LANerd 19.12.2012 / 19:29

1 resposta

1

Que tal isso:

 # monthly
 0  0  1     *  *    ("do full backup") 
 # weekly or daily
 0  0  2-31  *  *    (if test 'date +%u' -eq 7 then "do incremental backup" else "do incremental delta backup" ) 
    
por 19.12.2012 / 20:17

Tags