Cronjob executado a cada duas semanas, no sábado, começando neste sábado

9

Hoje é sexta-feira, 3 de outubro de 2014 3:58

Eu quero agendar um cronjob para executá-lo nas seguintes datas:

  1. sábado, 4 de outubro de 2014 08:00
  2. sábado, 18 de outubro de 2014 08:00
  3. sábado, 1 de novembro de 2014 8:00 ... ...

Então a cada 2 semanas, no sábado, às 8 horas.

    
por kupa 03.10.2014 / 11:17

2 respostas

23
0 8 * * 6 test $((10#$(date +\%W)\%2)) -eq 1 && yourCommand

date +%W : número de semana do ano com segunda-feira como primeiro dia da semana, hoje semana 39

10#$(date +%W) : converta o date +W para o número decimal e evite confusão na análise da base do shell

$((39%2)) : modulo operation: o resultado é 0 (até mesmo número da semana) ou 1 (número da semana ímpar), o resultado desta semana é 1, na próxima semana 0

test 1 -eq 1 : teste aritmético (igual), neste caso o resultado é booleano verdadeiro

&& yourCommand : Booleano AND: executa yourCommand apenas se o resultado do comando anterior for booleano verdadeiro

Note que o ano pode durar duas semanas ímpares: 53 (este ano) e 1 (ano seguinte)

    
por 03.10.2014 / 11:36
4

O que você mostrou é "toda semana". Então o código é:

0 8 * * 6

Tem certeza de que precisa executá-lo a cada duas semanas?

0 8 * * 6 expr 'date +\%s' / 604800 \% 2 >/dev/null || yourCommand
    
por 03.10.2014 / 11:35