Usando o cron e um script, como posso fazer com que algo seja acionado, por exemplo, às 10h, 11 dias antes da última terça-feira de cada mês?

2

Gostaria de programar uma tarefa para ser executada por alguns segundos, minutos, horas, dias ou semanas antes de um dia específico de uma semana em um determinado mês. Exemplos seriam:

  • às 8h, 7 dias antes da última terça-feira de cada mês
  • às 10h, 11 dias antes do segundo sábado de cada mês
  • às 18h, 3 dias antes da última sexta-feira de cada mês

Sinto-me à vontade ao configurar o cron / at para executar tarefas em dias específicos e percebo que, se eu quisesse executar esses tipos de agendas, provavelmente teria que executar um script em conjunto com o cron. / p>

Alguém tem um exemplo de como eu poderia fazer isso?

    
por abitgone 20.06.2012 / 12:37

1 resposta

6

Para o seu primeiro exemplo, oito horas, sete dias antes da última terça-feira do mês, eu faria isso:

0 8 * * 2 [[ $(date +%m) -eq $(date -d +7days +%m) ]] && [[ $(date +%m) -ne $(date -d +14days +%m) ]] && myscript

O que acontece é às 8h todas as terças-feiras ( 0 8 * * 2 ) e depois diz "se o mês daqui a 7 dias for o mesmo que este mês" (isto é, não é o último > Terça-feira do mês) e "se o mês daqui a 14 dias não for igual a este mês" (ou seja, esta é a segunda última terça-feira do mês), execute myscript .

Isso pode ser tecnicamente mais eficiente - por exemplo, você sabe que a segunda-última terça-feira do mês não pode ser o primeiro dia do mês - mas isso dificulta ainda mais Compreendo. :) Além disso, dependendo de exatamente qual cron do shell é executado, e assim por diante, pode haver alguma necessidade de cotação ( +%m pode precisar ser "+%m" ) ou talvez seja necessário escapar do sinal de porcentagem (ou seja, +%m pode precisar para ser +\%m ).

A generalização desse truque para outros dias e combinações avançadas é deixada como um exercício para o leitor.

    
por 20.06.2012 / 13:47