На OpenBSD , можно использовать следующее для сжатия */5
5-минутной crontab(5)
работы в 00
почасовую (чтобы убедиться, что меньше писем генерируется, все при выполнении одной и той же задачи с точными интервалами):
#!/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
Обратите внимание, что date(1)
также разбил бы sleep(1)
по замыслу на последней итерации, поскольку 60
минут не является действительным временем (если это не так! ), поэтому нам не придется ждать дополнительного времени, прежде чем мы получим отчет по электронной почте.
Также обратите внимание, что если одна из итераций займет больше 5 минут, то sleep
также выйдет из строя, вообще не спя (из-за того, что отрицательное число интерпретируется как опция командной строки) вместо того, чтобы переходить к следующему часу или даже к вечности), таким образом, убедившись, что ваша работа все еще может быть завершена в течение выделенного часа (например, если только одна из итераций занимает чуть более 5 минут, тогда у нас все равно будет время, чтобы наверстать упущенное, без чего-либо переходящего в следующий час).
printf(1)
необходим, потому что date
ожидает ровно две цифры для минутной спецификации.