Запустить задание cron с 06:05 до 22:05 каждые 15 минут

Запустить задание cron с 06:05 до 22:05 каждые 15 минут

Мне нужно запускать задание cron каждые 15 минут, начиная с 06:05 и заканчивая 22:05.

0 5/15 6-22 * * *

Следующий синтаксис включает 22:35 и 22:50.

Есть идеи, как этого добиться? Это возможно с одной линией или мне нужно настроить несколько?

решение1

Это возможно с одной кронлинией, но только с трюками.

SHELL=/bin/bash
5-50/15 6-22 * * * [[ '2220 2235 2250' =~ "$(date +\%H\%M)" ]] || /path/to/script

Или с sh(и bash)

SHELL=/bin/sh
5-50/15 6-22 * * * case "$(date +\%H\%M)" in 2220|2235|2250) ;; *) /path/to/script;;esac

Обратите внимание на экранирование символов процента (%) с помощью обратной косой черты, необходимой для файлов crontab.

решение2

«Cron Job» от xmodulo распространяется по лицензии CC BY 2.0

*/15 6-22 * * * /path/to/script

ИЛИ

5,20,35,50 6-22 * * *  /path/to/script

Поле может быть звездочкой (*), которая всегда означает «первый-последний». Разрешены диапазоны чисел. Диапазоны — это два числа, разделенные дефисом. Указанный диапазон является включающим. Например, 8-11 для записи «часов» указывает выполнение в часы 8, 9, 10 и 11.

Списки разрешены. Список — это набор чисел (или диапазонов), разделенных запятыми. Примеры: «1,2,5,9», «0-4,8-12».

Значения шагов можно использовать вместе с диапазонами. После диапазона "" указывает пропуски числового значения в диапазоне. Например, "0-23/2" можно использовать в поле часов, чтобы указать выполнение команды через час (альтернатива в стандарте V7 — "0,2,4,6,8,10,12,14,16,18,20,22"). Шаги также разрешены после звездочки, поэтому, если вы хотите сказать "каждые два часа", просто используйте "*/2".

Имена также могут быть использованы для полей "месяц" и "день недели". Используйте первые три буквы определенного дня или месяца (регистр не имеет значения). Диапазоны или списки имен не допускаются.

Поле «sixth» (остальная часть строки) определяет команду, которую нужно запустить. Вся командная часть строки, до символа новой строки или %, будет выполнена /bin/sh или оболочкой, указанной в переменной SHELL cronfile. Знаки процента (%) в команде, если они не экранированы обратной косой чертой (), будут заменены на символы новой строки, а все данные после первого % будут отправлены команде как стандартный ввод.

Примечание: День выполнения команды можно указать двумя полями — день месяца и день недели. Если оба поля ограничены (т. е. не *), команда будет запущена, когда любое из полей совпадет с текущим временем. Например, "30 4 1,15 * 5" приведет к запуску команды в 4:30 утра 1-го и 15-го числа каждого месяца, а также каждую пятницу.

решение3

Я бы лично разделил это на две строки:

5-50/15 6-21 * * * /path/to/script
5       22   * * * /path/to/script

Первая линия для покрытия 06:05-21:50, вторая - для дополнительного рейса в 22:05.

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

5-50/15 6-22 * * * [[ $(date +"\%-H\%M") -le 2210 ]] && /path/to/script

решение4

Немного поздно, но в интересах полноты картины вы можете получить список будущих времен выполнения для любого выражения cron на CronBuddy.com — это простой способ проверить, что произойдет.

Связанный контент