
Мне нужно запускать задание 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
*/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 — это простой способ проверить, что произойдет.