É possível agendar um cron job para ser executado quinzenalmente?

6

Existe uma maneira de agendar uma tarefa cron para ser executada a cada quinze dias?

(Uma maneira de pensar, dentro de crontab , seria adicionar duas entradas para "data do mês" ...)

    
por Ankur Banerjee 19.04.2015 / 23:59

2 respostas

11

Não, o cron só sabe sobre o dia da semana, o dia do mês e o mês.

A execução de um comando duas vezes por mês em dias fixos (por exemplo, o primeiro e o décimo sexto) é fácil:

42 4 1,16 * *  do_stuff

Executar um comando a cada duas semanas é outro assunto. O melhor que você pode fazer é executar um comando toda semana e fazer com que ele não faça nada a cada duas semanas. No Linux, você pode dividir o número de segundos desde a época ( date +%s ) pelo número de segundos em uma semana para obter um número que alterna a paridade toda semana. Note que em um crontab, % precisa ser escapado (o cron transforma % em novas linhas antes de executar o comando).

42 4 * * 1  case $(($(date +\%s) / (60*60*24*7))) in *[02468]) do_stuff;; esac
    
por 20.04.2015 / 01:02
1

Você não pode ter diretamente cron executando um trabalho quinzenalmente (a cada duas semanas). No entanto, é razoavelmente simples garantir que a parte principal do trabalho seja executada apenas a cada duas semanas. A @Gilles ofereceu uma solução; aqui está outro:

42 4 * * 1    test 1 -eq $(($(date +\%g) & 1)) && do_stuff...

O comando date +%g retorna o número da semana atual (do ano), e este é ANDed bit a bit para retornar 1 ou 0 antes de ser usado para determinar se o trabalho real pode ser executado.

O mesmo aviso no símbolo de porcentagem % : em uma entrada crontab , ele deve ter o escape para evitar que cron o trate especialmente.

    
por 20.04.2015 / 15:49

Tags