A sintaxe padrão do cron é bem simples, 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 entediante e difícil de entender ou manter; No entanto, esta abordagem não é aplicável no seu caso (não menos importante, porque o cron padrão não tem noção do ano civil).
Não é um grande plano tornar os comandos do cron complicados, 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 será executada às 21:30; você precisa da segunda linha se desejar executar também às 21:00, se não, então, omitir)
NOTA: Em alguns crontabs você deve escapar dos sinais de porcentagem (eles são usados para indicar novas linhas ao encher dados em linha na entrada padrão do comando), embora não no cron de Dillon.
O comando cron é realmente uma lista de comandos do shell , o operador ||
control fornece short avaliação de circuito dos comandos. Os comandos na 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 for verdadeira (somente true por um dia) mycommand
não será executado, quando a comparação de datas retornar false mycommand
será executada.
Note, entretanto, que muitas coisas podem diferir na maneira como o cron inicia programas. A abordagem mais robusta é usar um script wrapper para implementar sua lógica condicional.