crontab exclui apenas data específica

crontab exclui apenas data específica

Como posso escrever um cron que exclua uma data específica.

digamos: preciso executar um crontab das 18h às 21h a cada 30 minutos nos finais de semana e quero excluir apenas 10 de maio de 2014.

É possível? Como posso escrever isso? ou há alguma alternativa para isso? por favor sugira.

Responder1

A sintaxe padrão do cron é bastante simples e não suporta exclusões. Em alguns casos é possível criar uma lista de várias/muitas entradas cron para implementar tal lógica, mas isso tende a ser tedioso e difícil de entender ou manter; essa abordagem não é aplicável no seu caso (até porque o cron padrão não tem noção do ano civil).

Não é um bom plano complicar os comandos cron, mas você pode fazer isso com algo relativamente simples como:

0,30 18-20 * * sat,sun [ "$(date +\%Y\%m\%d)" = "20140510" ] || mycommand
0    21    * * sat,sun [ "$(date +\%Y\%m\%d)" = "20140510" ] || mycommand

(Com " 0,30 18-21" a tarefa também seria executada às 21h30; você precisará da segunda linha se desejar executar também às 21h, caso contrário, omita-a)

NOTA: Emalguns crontabsvocê deve escapar dos sinais de porcentagem (eles são usados ​​para indicar novas linhas ao inserir dados embutidos na entrada padrão do comando), embora não no cron de Dillon.

O comando cron é realmente um shelllista de comandos, o ||operador de controle forneceavaliação de curto-circuitode comandos. Os comandos da lista são tentados um de cada vez, da esquerda para a direita, mas a execução é interrompida quando o primeiro retorna verdadeiro. Se a comparação da string de data retornar verdadeiro (apenas verdadeiro para um dia) mycommandnão for executada, quando a comparação de data retornar falso mycommandserá executada.

Observe, entretanto, que muitas coisas podem diferir na maneira como o cron inicia os programas. A abordagem mais robusta é usar um script wrapper para implementar sua lógica condicional.

Responder2

Você pode usar X-Ypara intervalos de tempo e */Zfrequências. Onde:

  • Xé o início do intervalo.
  • Yé o fim do intervalo.
  • Zé apenas um divisor (ou seja: each Z).

Para excluir uma data, eu apenas criaria meu próprio script. Dentro deste script, verifique a data e decida se deseja executar as seguintes instruções.

informação relacionada