Да, да, вопрос старше года, но, может быть, я могу добавить что-нибудь полезное:
Как создать что-то со случайным смещением 20 раз в день с 9:00 до 23:00?Это немного сложно в cron, потому что вы делите 14 часов на 20 раз выполнения.Мне не очень нравятся другие ответы, потому что они требуют написания скрипта bash wrapper для вашего php-скрипта.
Однако, если вы позволите мне, я могу уменьшить время и частоту до 13 раз между8:30 и 23:09, это может помочь, и все в пределах вашего crontab:
30 8-21/* * * * sleep ${RANDOM:0:2}m ; /path/to/script.php
$ {RANDOM: 3: 2} использует $ RANDOM от bash, о котором упоминали другие люди выше, но добавляет срез массива bash.Поскольку переменные bash не типизированы, псевдослучайное 16-разрядное число со знаком усекается до первых 2 из его 5 десятичных цифр, что дает вам краткую однострочную строку для отсрочки выполнения cronjob между 10 и 99 минутами (хотя распределение смещено в сторонуС 10 по 32).
Следующее может также сработать для вас, но я обнаружил, что оно «менее случайное» по какой-то причине (возможно, закон Бенфорда срабатывает путем модуляции псевдослучайных чисел.не знаю, я завалил математику ... вините в bash!):
30 8-21/* * * * sleep $[RANDOM\%90]m ; /path/to/script.php
Вам нужно отобразить модуль как '\%' выше, потому что cron (ну, по крайней мере, Linux 'vixie-cron')завершает строку, когда встречает неэкранированный '%'.
Возможно, вы могли бы получить оставшиеся 7 выполнений сценария, добавив еще одну строку с другим 7-часовым диапазоном.Или ослабьте ограничение на бег с 3:00 до 23:00.