Введение

Планировщик задач для Unix-подобных операционных систем

Утилита командной строки cron является планировщиком задач в Unix-подобных операционных системах. Пользователи, настраивающие и поддерживающие программные среды, используют cron для планирования задач (команд или скриптов оболочки), также известных как cron jobs, для периодического запуска в заданное время, дату или с определенным интервалом. Обычно он автоматизирует обслуживание или администрирование системы, хотя его универсальность делает его полезным и для таких задач, как загрузка файлов из Интернета или регулярная проверка электронной почты. Cron наиболее подходит для планирования повторяющихся задач. Для планирования однократных задач можно использовать связанную утилиту at. Название "Cron" происходит от Chronos, греческого слова, означающего время.

Управление часовыми поясами

Большинство реализаций cron интерпретируют записи crontab в системном часовом поясе, под которым работает демон cron. Это может приводить к разногласиям, если на большой многопользовательской машине есть пользователи в разных часовых поясах, особенно если системный часовой пояс по умолчанию включает переход на летнее время, что может быть запутанным. Поэтому реализация cron может, в качестве исключения, распознавать строки вида "CRON TZ=<часовой пояс>" в пользовательских crontab-файлах, интерпретируя последующие записи crontab относительно указанного часового пояса.

Современные версии

С появлением проекта GNU и Linux появились новые реализации cron. Наиболее распространенной из них является 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. dcron для DragonFly был создан его основателем Мэттом Диллоном, а в 2010 году его поддержку взял на себя Джим Прайор. В 2003 году Дейл Меллор представил mcron, вариант cron, написанный на Guile, который обеспечивает обратную совместимость с Vixie cron, а также большую гибкость, позволяя использовать произвольный код Scheme для вычислений расписания и определения задач. Поскольку демон mcron и файлы crontab обычно написаны на Scheme (хотя mcron также принимает традиционные crontab Vixie), накопленное состояние очереди задач пользователя доступно коду задач, который может быть запланирован для выполнения только в том случае, если результаты других задач соответствуют определенным критериям. Mcron развертывается по умолчанию в пакетном менеджере Guix, который включает в себя механизмы (сервисы) для пакетного менеджера, позволяющие монодически генерировать crontab mcron, одновременно обеспечивая установку пакетов, необходимых для выполнения задач, и правильные ссылки на них в соответствующих crontab. Решение webcron планирует выполнение задач на регулярной основе в средах веб-хостинга, где реализации cron недоступны.

Нестандартные символы

Ниже приведены нестандартные символы, которые существуют только в некоторых реализациях cron, таких как планировщик Quartz Java. Символ "L" означает "последний". При использовании в поле "день недели" он позволяет указывать конструкции, такие как "последняя пятница" заданного месяца. В поле "день месяца" он указывает последний день месяца. Символ "W" допустим для поля "день месяца". Он используется для указания ближайшего к указанному дню буднего дня (с понедельника по пятницу). Например, если в поле "день месяца" указано значение "", это означает "ближайший к 15-му числу месяца будний день". Таким образом, если 15-е число приходится на субботу, задача будет выполнена в пятницу 14-го. Если 15-е число приходится на воскресенье, задача будет выполнена в понедельник 16-го. Если 15-е число приходится на вторник, задача будет выполнена во вторник 15-го. Однако, если в качестве значения дня месяца указано "1W", а 1-е число приходится на субботу, задача будет выполнена в понедельник 3-го, так как она не "перескакивает" через границу дней месяца. Символ "W" можно указывать только для одного дня месяца, а не для диапазона или списка дней. Символ решётки "#" допустим для поля "день недели" и должен следовать за ним число от 1 до 5. Он позволяет указывать конструкции, такие как "вторая пятница" заданного месяца. Например, ввод "5#3" в поле "день недели" соответствует третьей пятнице каждого месяца. Знак вопроса "?" в некоторых реализациях используется вместо "" для того, чтобы оставить поле "день месяца" или "день недели" пустым. В других реализациях cron символ "?" заменяется временем запуска демона cron, поэтому, если cron запускается в 8:25 утра, значение будет обновлено до 8:25, и задача будет выполняться в это время каждый день до перезапуска. Слэш (/) В vixie cron слэши можно комбинировать с диапазонами для указания шага. В этих случаях эквивалентно расписанию vixie cron в разделе минут. Аналогично, можно удалить лишний из , из , и из для часов, дней и месяцев соответственно. Символ "H" используется в системе непрерывной интеграции Jenkins для обозначения того, что подставляется "хэшированное" значение. Таким образом, вместо фиксированного числа, такого как "", что означает 20 минут после каждого часа, "" указывает, что задача выполняется каждый час в неустановленное, но постоянное время для каждой задачи. Это позволяет распределить задачи во времени, а не запускать их одновременно и создавать конкуренцию за ресурсы.