Cron задание, случайный запуск, но в сроки

11

Я хочу, чтобы скрипт запускался один раз в день, каждый день, начиная с 09:00 до 1200.
Я не совсем уверен в синтаксисе дефиса - означает ли это, что скрипт будет запускаться КАЖДЫЙ час 9-12или же он СЛУЧАЙНО запускается между 9-12? Потому что мне нужно последнее.

little_sg
источник

Ответы:

7

Я никогда не видел реализацию cron, в которой есть способ запустить задание в случайное время. Это странное требование. Как указано в документации, 9-12это ярлык 9,10,11,12, и означает каждый час с 9 до 12.

Если вы хотите запустить задание в произвольное время, запустите задание в начале интервала и добавьте случайную задержку. Например, чтобы запустить в произвольный час между 9 и 12:

SHELL=/bin/bash
0 9 * * * sleep $((3600 * (RANDOM % 4))); do_stuff

Обратите внимание, что RANDOMтребуется bash или ksh, он может быть недоступен в оболочке по умолчанию.

Если вы хотите работать в случайное время между 9 и 12, со вторым разрешением, вы можете использовать RANDOM % 10800в качестве задержки, но, поскольку оно RANDOMнаходится в диапазоне 0..32767, будет смещение в сторону задержек между 0 и 32768%. 10800 = 368. Чтобы избежать этого смещения:

SHELL=/bin/bash
0 9 * * * max=$((32768/10800*10800)); while delay=$RANDOM; ((delay > max)); do :; done; sleep $((delay % 10800)); do_stuff
Жиль "ТАК - перестань быть злым"
источник
5
«Это странное требование». Я не согласен. Многие приложения, особенно те, которым необходимо периодически регистрироваться на сервере (например, менеджеры пакетов или клиенты управления конфигурацией), должны распределять время выполнения, чтобы избежать ситуации с грохотом . Фактически, во многих таких приложениях есть встроенные параметры отображения (например, --randomwaitаргумент для yum или --splayаргумент для chef-клиента), но для тех, которые этого не делают, случайное время выполнения было бы полезной функцией в планировщике заданий.
Джейхендрен
Соответствующий: stackoverflow.com/a/34815984/5419599
Подстановочный