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) mycommand
não for executada, quando a comparação de data retornar falso mycommand
será 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-Y
para intervalos de tempo e */Z
frequências. Onde:
X
é o início do intervalo.Y
é o fim do intervalo.Z
é apenas um divisor (ou seja: eachZ
).
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.