No OpenBSD , o seguinte pode ser usado para compactar um */5
5-minutos crontab(5)
trabalho em um 00
por hora (para ter certeza de que menos e-mails serão gerados, tudo durante a mesma tarefa em intervalos exatos):
#!/bin/sh -x
for k in $(jot 12 00 55)
do
echo $(date) doing stuff
sleep $(expr $(date -j +%s $(printf %02d $(expr $k + 5))) - $(date -j +%s))
done
Observe que o date(1)
também quebraria o sleep(1)
por design na iteração final, pois 60
minutos não é um tempo válido (a menos que seja!), portanto não teremos que esperar nenhum tempo extra antes para obter nosso relatório de e-mail.
Observe também que, se uma das iterações levar mais de 5 minutos, a sleep
também falhará de propósito se não for totalmente adormecida (devido a um número negativo interpretado como uma opção de linha de comando) , em vez de passar para a próxima hora ou até mesmo a eternidade), garantindo que seu trabalho ainda possa ser concluído dentro de uma hora alocada (por exemplo, se apenas uma das iterações demorar um pouco mais de 5 minutos, ainda teríamos tempo para recuperar o tempo perdido, sem nada para a próxima hora).
O printf(1)
é necessário porque date
espera exatamente dois dígitos para a especificação do minuto.