хрон
Разработчик(и) | AT&T Bell Laboratories |
---|---|
Первоначальный выпуск | май 1975 г |
Написано в | С |
Операционная система | Unix и Unix-подобные , Plan 9 , Inferno |
Тип | Планировщик заданий |
The cron
Утилита командной строки — это планировщик заданий в Unix-подобных операционных системах . Пользователи, которые настраивают и обслуживают программные среды, используют cron для планирования заданий. [ 1 ] (команды или сценарии оболочки ), также известные как задания cron , [ 2 ] [ 3 ] запускаться периодически в фиксированное время, даты или интервалы. [ 4 ] Обычно он автоматизирует обслуживание или администрирование системы, хотя его универсальный характер делает его полезным для таких вещей, как загрузка файлов из Интернета и загрузка электронной почты через регулярные промежутки времени. [ 5 ]
Cron наиболее подходит для планирования повторяющихся задач. Планирование одноразовых задач можно выполнить с помощью связанной утилиты at .
Имя Крона происходит от Chronos , греческого слова, обозначающего время. [ 6 ] [ нужен лучший источник ]
Обзор
[ редактировать ]Действия cron управляются файлом crontab (таблица cron), файлом конфигурации, который определяет команды оболочки , которые будут запускаться периодически по заданному расписанию. списки заданий и другие инструкции для демона Файлы crontab хранятся там, где хранятся cron. Пользователи могут иметь свои собственные файлы crontab, и часто существует общесистемный файл crontab (обычно в /etc
или подкаталог /etc
например /etc/cron.d
), которые могут редактировать только системные администраторы. [ примечание 1 ]
Каждая строка файла crontab представляет задание и выглядит следующим образом:
# * * * * * <command to execute>
# | | | | |
# | | | | day of the week (0–6) (Sunday to Saturday;
# | | | month (1–12) 7 is also Sunday on some systems)
# | | day of the month (1–31)
# | hour (0–23)
# minute (0–59)
Синтаксис каждой строки предполагает выражение cron, состоящее из пяти полей, которые представляют время выполнения команды, за которым следует команда оболочки для выполнения.
Хотя обычно задание выполняется, когда все поля спецификации времени/даты соответствуют текущему времени и дате, есть одно исключение: если и «день месяца» (поле 3), и «день недели» (поле 5) ограничены ( не содержать "*"), то один или оба должны соответствовать текущему дню. [ 7 ]
Например, следующий код очищает журнал ошибок Apache каждый день в одну минуту после полуночи (00:01), предполагая, что оболочка по умолчанию для пользователя cron совместима с оболочкой Bourne :
1 0 * * * printf "" > /var/log/apache/error_log
В этом примере программа оболочки под названием Export_dump.sh запускается каждую субботу в 23:45 (23:45).
45 23 * * 6 /home/oracle/scripts/export_dump.sh
Примечание. В некоторых системах также можно указать */n
запускаться для каждого n -го интервала времени. Кроме того, указание нескольких конкретных интервалов времени можно выполнить с помощью запятых (например, 1,2,3
). Строка ниже будет выводить «привет, мир» в командную строку каждые 5 минут каждого первого, второго и третьего часа (т. е. 01:00, 01:05, 01:10 и до 03:55).
*/5 1,2,3 * * * echo hello world
Файл конфигурации для пользователя можно редактировать, вызвав crontab -e
независимо от того, где фактическая реализация хранит этот файл.
Некоторый cron
реализации, такие как популярная 4-я редакция BSD, написанная Полом Викси и включенная во многие дистрибутивы Linux, добавляют шестое поле: имя пользователя учетной записи, которая запускает указанное задание (в зависимости от существования пользователя и его разрешений). Это разрешено только в системных crontabs, а не в других, каждая из которых назначена для настройки одному пользователю. В качестве альтернативы шестое поле иногда используется для года вместо имени пользователя учетной записи — это делает демон nncron для Windows.
Реализация cron Amazon EventBridge не использует день недели, отсчитываемый от 0, вместо этого используются значения 1–7 SUN-SAT (вместо 0–6), а также поддерживаются дополнительные функции выражения, такие как первый день недели и последний день недели. -месяц. [ 8 ]
Нестандартные предопределенные определения планирования
[ редактировать ]Некоторые реализации cron [ 9 ] поддерживают следующие нестандартные макросы:
Вход | Описание | Эквивалентно |
---|---|---|
@yearly (или @annually )
|
Запускается один раз в год в полночь 1 января. | 0 0 1 1 *
|
@monthly
|
Запускается один раз в месяц в полночь первого дня месяца. | 0 0 1 * *
|
@weekly
|
Запуск раз в неделю в полночь воскресенья | 0 0 * * 0
|
@daily (или @midnight )
|
Запускать один раз в день в полночь | 0 0 * * *
|
@hourly
|
Запускать один раз в час в начале часа | 0 * * * *
|
@reboot
|
Запускать при запуске | — |
@reboot
настраивает задание для запуска один раз при запуске демона. Поскольку cron обычно никогда не перезапускается, это обычно соответствует загрузке компьютера. Такое поведение применяется в некоторых вариантах cron, например, в Debian . [ 10 ] чтобы простой перезапуск демона не запускался повторно @reboot
рабочие места.
@reboot
может быть полезно, если есть необходимость запустить сервер или демон под конкретным пользователем, а у пользователя нет доступа к настройке init для запуска программы.
Разрешения cron
[ редактировать ]Эти два файла играют важную роль:
- /etc/cron.allow – если этот файл существует, он должен содержать имя пользователя, чтобы этому пользователю было разрешено использовать задания cron.
- /etc/cron.deny – если файл cron.allow не существует, но файл /etc/cron.deny существует, то для использования заданий cron пользователи не должны быть указаны в файле /etc/cron.deny.
Обратите внимание: если ни один из этих файлов не существует, то, в зависимости от параметров конфигурации, зависящих от сайта, либо только суперпользователь может использовать задания cron, либо все пользователи могут использовать задания cron.
Обработка часового пояса
[ редактировать ]Большинство реализаций cron просто интерпретируют записи crontab в настройках часового пояса системы, под которыми работает демон cron. Это может стать источником споров, если на большой многопользовательской машине есть пользователи в нескольких часовых поясах, особенно если часовой пояс системы по умолчанию включает потенциально запутанное летнее время . Таким образом, реализация cron в частном случае может распознавать строки вида «CRON_TZ=<часовой пояс>» в пользовательских таблицах crontab, интерпретируя последующие записи crontab относительно этого часового пояса. [ 11 ]
История
[ редактировать ]Ранние версии
[ редактировать ]Cron в версии 7 Unix представлял собой системную службу (позже названную демоном ), вызываемую из /etc/rc
когда операционная система перешла в многопользовательский режим. [ 12 ] ее Алгоритм был прост:
- Читать
/usr/lib/crontab
[ 13 ] - Определите, должны ли какие-либо команды выполняться в текущую дату и время, и если да, запускайте их от имени суперпользователя root.
- Спи одну минуту
- Повторите с шага 1.
Эта версия cron была простой и надежной, но она также потребляла ресурсы независимо от того, находила ли она какую-либо работу или нет. В ходе эксперимента в Университете Пердью с разделением времени в конце 1970-х годов по распространению службы cron на все 100 пользователей VAX было обнаружено, что это создает слишком большую нагрузку на систему.
Многопользовательская возможность
[ редактировать ]Следующая версия cron, выпущенная с выпуском Unix System V , была создана для расширения возможностей cron для всех пользователей системы Unix, а не только для суперпользователя. Хотя сегодня это может показаться тривиальным, поскольку большинство Unix и Unix-подобных систем имеют мощные процессоры и небольшое количество пользователей, в то время это требовало нового подхода к системе с одним MIPS и примерно 100 учетными записями пользователей.
В августовском выпуске журнала Communications of the ACM за 1977 год В. Р. Франта и Курт Мали опубликовали статью под названием «Эффективная структура данных для набора событий моделирования», описывающую структуру данных очереди событий для дискретных систем моделирования, управляемых событиями, которая продемонстрировала « производительность выше, чем у обычно используемых простых алгоритмов связанных списков», хорошее поведение при неравномерном распределении времени и сложности в худшем случае. , «n» — количество событий в очереди.
Аспирант Purdue Роберт Браун, рецензируя эту статью, заметил параллель между cron и симуляторами дискретных событий и создал для экспериментов реализацию менеджера списков событий Franta-Maly (ELM). Дискретные симуляторы событий работают в виртуальном времени , максимально быстро отделяя события из очереди событий и продвигая свое представление о «сейчас» к запланированному времени следующего события. Запуск симулятора событий в «реальном времени» вместо виртуального времени создал версию cron, которая большую часть времени проводила во сне, ожидая запланированного времени для выполнения задачи в начале списка событий.
В следующем учебном году в аспирантуру Purdue вошли новые студенты, в том числе Кит Уильямсон, который присоединился к системному персоналу факультета компьютерных наук. В качестве «разминочной задачи» Браун попросил его превратить прототип cron в производственный сервис, и этот многопользовательский cron начал использоваться в Purdue в конце 1979 года. Эта версия cron полностью заменила /etc/cron
он использовался на VAX 11/780 факультета информатики под управлением 32/V.
Алгоритм, используемый этим cron, следующий:
- При запуске найдите файл с именем
.crontab
в домашних каталогах всех владельцев учетных записей. - Для каждого найденного файла crontab определите, когда в следующий раз в будущем должна быть запущена каждая команда.
- Поместите эти команды в список событий Франта-Малый с соответствующим временем и спецификатором времени «пять полей».
- Войдите в основной цикл:
- Изучите запись задачи в начале очереди и вычислите, как далеко в будущем она должна выполниться.
- Спите в течение этого периода времени.
- После пробуждения и проверки правильного времени выполните задачу в начале очереди (в фоновом режиме) с привилегиями пользователя, который ее создал.
- Определите следующий раз в будущем для запуска этой команды и поместите ее обратно в список событий в это время.
Кроме того, демон отвечает на сигналы SIGHUP для повторного сканирования измененных файлов crontab и планирует специальные «события пробуждения» на час и полчаса для поиска измененных файлов crontab. Здесь опущено много деталей, касающихся неточностей компьютерного отслеживания времени суток, планирования тревог Unix, явных изменений времени суток и управления процессами, на которые приходится большая часть строк кода в этом cron. Этот cron также фиксировал выходные данные stdout и stderr и отправлял их по электронной почте владельцу crontab.
Ресурсы, потребляемые этим cron, масштабируются только в зависимости от объема выполняемой работы и не увеличиваются с течением времени, за исключением периодической проверки изменений.
Уильямсон завершил учебу, покинул университет со степенью магистра наук в области компьютерных наук и присоединился к AT&T Bell Labs в Мюррей-Хилл, штат Нью-Джерси, и взял с собой этот cron. В Bell Labs он и другие внедрили Unix. at
команду в cron, переместил файлы crontab из домашних каталогов пользователей (которые не зависели от хоста) в общий каталог спула, специфичный для хоста, и по необходимости добавил crontab
команда, позволяющая пользователям копировать свои файлы crontab в этот каталог спулинга.
Эта версия cron позже появилась практически без изменений в Unix System V , а также в BSD и их производных: Solaris от Sun Microsystems , IRIX от Silicon Graphics , HP-UX от Hewlett-Packard и AIX от IBM . Технически, первоначальная лицензия на эти реализации должна была принадлежать Исследовательскому фонду Purdue, который финансировал работу, но это произошло в то время, когда подобным вопросам уделялось мало внимания.
Современные версии
[ редактировать ]С появлением проекта GNU Project и Linux появились новые crons. Наиболее распространенным из них является Vixie cron, первоначально написанный Полом Викси в 1987 году. Версия 3 Vixie cron была выпущена в конце 1993 года. Версия 4.1 была переименована в ISC Cron и выпущена в январе 2004 года. Версия 3 с некоторыми незначительными исправлениями. , используется в большинстве дистрибутивов Linux и BSD.
В 2007 году Red Hat разделила vixie-cron 4.1 на проект cronie и включила anacron 2.3 в 2009 году. [ нужна ссылка ] . Однако Anacron не является независимой программой cron; другое задание cron должно вызвать его.
DragonFly Дкрон был создан его основателем Мэттом Диллоном , а его сопровождение в 2010 году взял на себя Джим Прайор. [ 14 ]
В 2003 году Дейл Меллор представил mcron. [ 15 ] вариант cron, написанный на Guile , который обеспечивает перекрестную совместимость с cron Vixie, а также обеспечивает большую гибкость, поскольку позволяет схемы использовать произвольный код при планировании вычислений и определении заданий. Поскольку и демон mcron, и файлы crontab обычно записываются в виде схемы (хотя mcron также принимает традиционные crontab Vixie), совокупное состояние очереди заданий пользователя доступно для его кода задания, запуск которого можно запланировать, если будут получены результаты других рабочие места соответствуют определенным критериям. Mcron по умолчанию развертывается в менеджере пакетов Guix , который включает в себя средства ( сервисы ) для менеджера пакетов, позволяющие монадически создавать crontab-файлы mcron, одновременно гарантируя, что пакеты, необходимые для выполнения задания, установлены, и что соответствующие crontab-файлы правильно ссылаются на них. [ 16 ]
Решение webcron планирует регулярное выполнение кольцевых задач, если реализации cron недоступны в среде веб-хостинга .
Выражение Cron
[ редактировать ]Выражение cron — это строка, состоящая из пяти или шести полей, разделенных пробелами. [ 17 ] который представляет собой набор времен, обычно в виде расписания выполнения некоторой процедуры.
Комментарии начинаются со знака комментария # и должны находиться на отдельной строке.
Поле | Необходимый | Допустимые значения | Разрешенные специальные символы | Примечания |
---|---|---|---|---|
Минуты | Да | 0–59 | * , -
|
|
Часы | Да | 0–23 | * , -
|
|
День месяца | Да | 1–31 | * , - ? L W
|
? L W только в некоторых реализациях
|
Месяц | Да | 1–12 или ЯНВАРЬ–ДЕКАБРЬ | * , -
|
|
День недели | Да | 0–6 или ВС–СБ | * , - ? L #
|
? L # только в некоторых реализациях
|
Год | Нет | 1970–2099 | * , -
|
Это поле не поддерживается в стандартных реализациях/реализациях по умолчанию. |
Сокращения месяца и дня недели не чувствительны к регистру.
В конкретном случае системного файла crontab (/etc/crontab) пользовательское вставляется перед командой поле . Обычно для него установлено значение «root».
В некоторых случаях использования формата cron секунд в начале шаблона также имеется поле . В этом случае выражение cron представляет собой строку, содержащую 6 или 7 полей. [ 18 ]
- Звездочка (
*
) - Звездочки (также известные как подстановочные знаки) обозначают «все». Например, использование «* * * * *» будет выполняться каждую минуту. Использование «* * * * 1» будет выполняться каждую минуту только в понедельник. Использование шести звездочек означает каждую секунду, когда секунды поддерживаются.
- Запятая (
,
) - Запятые используются для разделения элементов списка. Например, использование «MON,WED,FRI» в пятом поле (день недели) означает понедельник, среду и пятницу.
- Дефис (
-
) - Дефис определяет диапазоны. Например, «2000-2010» означает каждый год с 2000 по 2010 год включительно.
- Процент (
%
) - Знаки процента (%) в команде, если они не экранированы обратной косой чертой (\), заменяются символами новой строки, а все данные после первого процента передаются команде в качестве стандартного ввода. [ 19 ]
Нестандартные персонажи
[ редактировать ]Следующие символы являются нестандартными и существуют только в некоторых реализациях cron, таких как планировщик Quartz Java .
L
- «L» означает «последний». При использовании в поле дня недели он позволяет указывать такие конструкции, как «последняя пятница» (« 5L ") данного месяца. В поле дня месяца указывается последний день месяца.
W
- В поле дня месяца допускается использование символа W. Этот символ используется для указания дня недели (понедельник-пятница), ближайшего к данному дню. Например, если « 15W » указывается в качестве значения поля дня месяца, что означает: «ближайший день недели к 15-му числу месяца». Таким образом, если 15-е число является субботой, триггер срабатывает в пятницу 14-го числа. Если 15-е число — воскресенье, триггер срабатывает в понедельник 16-го числа. Если 15-е число — вторник, то оно срабатывает во вторник 15-го числа. Однако если в качестве значения дня месяца указано «1W», а также 1-е число. является субботой, триггер срабатывает в понедельник, 3-го числа, поскольку он не «перескакивает» за границу дней месяца. Символ «W» можно указать только в том случае, если день месяца представляет собой один день, а не день. диапазон или список дней.
- Хэш (
#
) - В поле дня недели допускается использование символа «#», после которого должно следовать число от одного до пяти. Это позволяет указывать такие конструкции, как «вторая пятница» данного месяца. [ 20 ] Например, ввод «5#3» в поле дня недели соответствует третьей пятнице каждого месяца.
- Вопросительный знак (
?
) - В некоторых реализациях используется вместо ' * ', чтобы оставить день месяца или день недели пустым. Другие реализации cron заменяют "?" со временем запуска демона cron, так что
? ? * * * *
будет обновлен до25 8 * * * *
если cron запускается в 8:25 утра и будет работать в это время каждый день, пока не будет перезапущен снова. [ 21 ]
- Слэш (
/
) - В vixie-cron косые черты можно комбинировать с диапазонами для указания значений шага. [ 9 ] Например, */5 в поле минут означает каждые 5 минут (см. примечание о частоте ниже). Это сокращение более подробной формы POSIX. 5,10,15,20,25,30,35,40,45,50,55,00 . POSIX не определяет использование косой черты; в его обосновании (комментарии к расширению BSD) отмечается, что определение основано на формате System V, но не исключает возможности расширений. [ 7 ]
Обратите внимание, что частоты в целом невозможно выразить; только значения шага, которые равномерно делят свой диапазон, выражают точные частоты (для минут и секунд, это /2, /3, /4, /5, /6, /10, /12, /15, /20 и /30 , потому что 60 делится на эти числа без остатка; часами, это /2, /3, /4, /6, /8 и /12 ); все другие возможные «шаги» и все другие поля дают непоследовательные «короткие» периоды в конце единицы времени, прежде чем она «сбрасывается» на следующую минуту, секунду или день; например, вводя */5 для поля дня иногда выполняется через 1, 2 или 3 дня, в зависимости от месяца и високосного года; это связано с тем, что cron не сохраняет состояние (он не запоминает время последнего выполнения и не подсчитывает разницу между ним и текущим моментом, необходимую для точного подсчета частоты - вместо этого cron представляет собой просто средство сопоставления с образцом).
Некоторые библиотеки для конкретного языка, предлагающие возможность планирования crontab, не требуют «строгих» диапазонов. 15-59/XX слева от косой черты, когда используются диапазоны. [ 22 ] В этих случаях 15/XX — это то же самое, что расписание vixie-cron 15-59/10 в разделе протоколов. Аналогичным образом можно удалить лишние -23 от 0-23/ХХ , -31 от 1-31/XX и -12 от 1-12/XX для часов, дней и месяцев; соответственно.
H
- «H» используется в системе непрерывной интеграции Jenkins для обозначения замены «хешированного» значения. Таким образом, вместо фиксированного числа, такого как '
20 * * * *
' что означает каждый час через 20 минут после часа'H * * * *
' указывает, что задача выполняется каждый час в неопределенное, но неизменное время для каждой задачи. Это позволяет распределять задачи по времени, а не заставлять их все запускаться одновременно и конкурировать за ресурсы. [ 23 ]
См. также
[ редактировать ]- в (команда)
- Запущен
- Список команд Unix
- Планирование (вычисления)
- systemd – включает эквивалент cron (называемый таймерами )
- fcron
- Планировщик задач Windows
Примечание
[ редактировать ]- ^ Это зависит от типа распространения.
Ссылки
[ редактировать ]- ^ «Автоматизация работы Cron в Centos 8» . 6 апреля 2020 г.
- ^ «Разница между cron, crontab и cronjob?» . Переполнение стека .
- ^ «Cron Job: комплексное руководство для начинающих 2020» . 24 мая 2019 г.
- ^ «Crontab – Краткий справочник» . Выбор администратора . 21 декабря 2009 г.
- ^ «Введение в cron для новичков» . Unixgeeks.org . Проверено 6 ноября 2013 г.
- ^ «Linux — cron и crontab» .
- ^ Перейти обратно: а б «crontab» , Базовые спецификации открытой группы, выпуск 7 — IEEE Std 1003.1, издание 2013 г. , The Open Group, 2013 г. , получено 18 мая 2015 г.
- ^ «Расписание выражений для правил» . Амазонка.
- ^ Перейти обратно: а б «Руководство по форматам файлов FreeBSD для CRONTAB(5)» . Проект FreeBSD.
- ^ «#77563 — cron: crontab(5) лежит, @reboot — это всякий раз, когда перезагружается cron, а не система» . Система отслеживания ошибок Debian . Проверено 6 ноября 2013 г.
- ^ «crontab(5): таблицы для управления cron — справочная страница Linux» . Linux.die.net . Проверено 6 ноября 2013 г.
- ^ "V7/etc/rc" . Домашняя страница Минни . Проверено 12 сентября 2020 г.
- ^ "V7/usr/src/cmd/cron.c" . Домашняя страница Минни . Проверено 12 сентября 2020 г.
- ^ Прайор, Джим (5 января 2010 г.). «Крон» . [электронная почта защищена] (список рассылки) . Проверено 6 ноября 2013 г.
- ^ Меллор, Дейл (1 июня 2003 г.). «Mcron — Требования пользователей и анализ» . Проверено 11 июня 2019 г.
- ^ «Справочное руководство GNU Guix: 8.8.2 Выполнение заданий по расписанию» . GNU Guix. 19 мая 2019 г. Проверено 11 июня 2019 г.
- ^ «Как использовать Ubuntu Cron» . Help.ubuntu.com. 04 мая 2013 г. Проверено 6 ноября 2013 г.
- ^ «Учебное пособие по CronTrigger» . Сайт кварцевого планировщика . Архивировано из оригинала 25 октября 2011 года . Проверено 24 октября 2011 г.
- ^ «ссылка на crontab mcron» . Gnu.org . Проверено 6 ноября 2013 г.
- ^ «Руководство по интеграции Oracle Role Manager» . Docs.oracle.com . Проверено 6 ноября 2013 г.
- ^ «Формат Cron» . nnРезервное копирование . Проверено 27 мая 2014 г.
- ^ «Питон Кронтаб» . Гитхаб . Проверено 5 апреля 2023 г.
- ^ «Синтаксис триггера таймера» . Дженкинс.com . Проверено 16 февраля 2018 г.
Внешние ссылки
[ редактировать ] в этой статье Использование внешних ссылок может не соответствовать политике и рекомендациям Википедии . ( июнь 2015 г. ) |
- Единая спецификация UNIX , Версия 4 от The Open Group : планирование периодической фоновой работы – Справочник по Shell и Utilities,
- GNU cron (мкрон)
- ИСК Крон 4.1
- дружок
- Цифровая библиотека ACM - Франта, Малый, «Эффективная структура данных для набора событий моделирования» (требуется подписка на пабы ACM)