Рейтинг:1

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

флаг cn

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

0 5/15 6-22 * * *

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

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

Kernel Stearns avatar
флаг de
Это своего рода хакерство, но мое внутреннее чутье состоит в том, чтобы добавить задание cron, которое запускается на 0605, которое добавляет другое задание cron, которое запускает то, что вы хотите, каждые 15 минут. Затем добавьте последнее задание cron, которое удалит подчиненное задание cron на 2205.
Рейтинг:4
флаг pe

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

*/15 6-22 * * * /путь/к/сценарию

ИЛИ ЖЕ

5,20,35,50 6-22 * * * /путь/к/сценарию

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

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

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

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

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

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

Gerrit avatar
флаг cn
5,20,35,50 6-23 * * * больше пробегов, чем просили, не так ли?
Arden Smith avatar
флаг pe
Я обновил свой ответ сейчас
Gerrit avatar
флаг cn
Но это все равно будет работать в 22:20, 22:35 и 22:50, кроме времени, указанного на плакате.
Gerrit avatar
флаг cn
Также возможно использовать несколько строк SHELL= в файле cron. Каждая строка SHELL будет применяться к следующим строкам, пока не появится другая строка SHELL=. То же самое для настроек env.
Рейтинг:3
флаг fr

Лично я бы разделил его на две строки:

5-50/15 6-21 * * * /путь/к/сценарию
5 22 * ​​* * /путь/к/сценарию

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

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

5-50/15 6-22 * * * [[ $(date +"\%-H\%M") -le 2210 ]] && /path/to/script
Gerrit avatar
флаг cn
Спецификатор поля «-» в формате даты, чтобы избежать восьмеричного, является приятным поворотом. Стоит отметить, что справа от -le также не следует ставить такие значения, как 0630, потому что они будут интерпретироваться как восьмеричные.
Рейтинг:1
флаг cn

Можно с одним cronline но только с уловками

ОБОЛОЧКА=/bin/bash
5-50/15 6-22 * * * [[ '2220 2235 2250' =~ "$(дата +\%Ч\%М)" ]] || /путь/к/сценарию

Или с ш (и баш)

ОБОЛОЧКА=/бин/ш
5-50/15 6-22 * * * case "$(date +\%H\%M)" in 2220|2235|2250) ;; *) /путь/к/сценарию;;esac

Обратите внимание на обратную косую черту для символов процента (%), необходимых для crontabs.

Рейтинг:1
флаг cn
Bob

Я ярый сторонник простоты.

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

Я бы попытался этого избежать и сделал следующее:

# .---------------- минута (0 - 59)
# | .------------- час (0 - 23)
# | | .---------- день месяца (1 - 31)
# | | | .------- месяц (1 - 12) 
# | | | | .---- день недели (0 - 6) (воскресенье=0 или 7) 
# | | | | |
# * * * * * команда для выполнения

# запускать my_batch каждые 15 минут, начиная с 06:05 и заканчивая 22:05 (крайний случай) 

5/15 6-21 * * * my_batch
5 22 * ​​* * мой_пакет

Когда ваше расписание еще более сложное и не подходит для объявления в простом расписании cron, я предпочитаю встраивать логику в само пакетное задание (или оболочку для пакетного задания).

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

# запускать my_batch_wrapper каждые 15 минут 

5/15 * * * * my_batch_wrapper

и в псевдокоде my_batch_wrapper

   # не запускать my_batch до 06:05 или после 22:05 

   если [ сейчас () < 06:05 ] ; выход 0 

   если [ сейчас() > 22:06 ] ; выход 0 

  
   /путь/к/my_batch 

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.