Cron: краткое пособие для начинающих
Cron (Command Run ON) — система для автоматического запуска программ и скриптов на сервере в определённое время.
Crontab (таблица cron) представляет собой текстовый файл, который определяет расписание заданий cron. Существует два типа файлов crontab. Общесистемные файлы crontab и отдельные пользовательские файлы crontab.
Файлы crontab пользователей именуются в соответствии с именем пользователя, и их расположение зависит от операционной системы. В дистрибутивах на основе Red Hat, таких как CentOS, файлы crontab хранятся в каталоге /var/spool/cron
, а файлы Debian/Ubuntu/LMDE хранятся в каталоге /var/spool/cron/crontabs
.
Основным общесистемным файлом crontab является файл /etc/crontab
.
Журналы Cron хранятся в системном журнале /var/log/syslog
в системах Debian/Ubuntu/LMDE и в /var/log/cron
в Redhat/Rocky Linux. Вы можете отфильтровать файл журнала с помощью команды grep
, чтобы проверить, успешно ли выполнено задание cron или нет.
grep "cron" /var/log/syslog | tail
Установка
Если cron не установлен на вашей системе, вы можете установить его:
# Debian/Ubuntu/LMDE
sudo apt update
sudo apt install cron
sudo systemctl enable cron
Параметры Crontab
crontab -e |
Редактирование или создание файла расписания для текущего пользователя |
crontab -l |
Вывод содержимого расписания текущего пользователя |
crontab -r |
Удаление файла расписания текущего пользователя |
crontab -i |
Удаление файла расписания текущего пользователя с запросом перед удалением |
crontab -u user |
Работа с расписаниями конкретных пользователей. Доступно только суперпользователю |
Синтаксис Crontab и операторы
Каждая запись в crontab состоит из шести полей, указываемых в следующем порядке:
minute(s) hour(s) day(s) month(s) weekday(s) command(s)
# Пользователя может не указываться
[минута] [час] [день месяца] [месяц] [день недели] [пользователь] [команда]
* * * * * выполняемая команда - - - - - | | | | | | | | | ----- День недели (0 - 7) (Воскресенье =0 или =7) | | | ------- Месяц (1 - 12) | | --------- День (1 - 31) | ----------- Час (0 - 23) ------------- Минута (0 - 59)
Поля разделяются пробелами или знаками табуляции. Первые пять представляют собой числовые значения, а шестое - это команда, которая будет выполняться. В следующей таблице кратко описывается каждое из полей:
Поле | Диапазон значений | Описание |
---|---|---|
minute | 0-59 | Минута запуска команды |
hour | 0-23 | Час запуска |
day | 1-31 | Число (день) запуска |
month | 1-12 | Месяц запуска |
weekday | 0 - 6 | День недели запуска (воскресенье = 0, понедельник = 1, вторник = 2 и т.д.) |
command | Последовательность команд для выполнения. Это могут быть команды, исполняемые файлы (например, скрипты) или комбинации файлов. |
Формат описания диапазонов числовых значений
Диапазоны числовых значений могут задаваться в следующем формате:
Объявление | Значение |
---|---|
* |
Любое числовое значение |
*/5 |
Любое числовое значение, кратное 5 |
1-6 |
Любое числовое значение из диапазона от 1 до 6 (включительно) |
0-30/5 |
Любое числовое значение из диапазона от 0 до 30, кратное 5 |
1,4,9 |
Значение 1, 4 или 9 |
Формат описания месяцев
Месяцы могут описываться как с помощью числовых, так и с помощью строковых значений:
Числовое значение | Строковое значение | Месяц |
---|---|---|
1 | jan | Январь |
2 | feb | Февраль |
3 | mar | Март |
4 | apr | Апрель |
5 | may | Май |
6 | jun | Июнь |
7 | jul | Июль |
8 | aug | Август |
9 | sep | Сентябрь |
10 | oct | Октябрь |
11 | nov | Ноябрь |
12 | dec | Декабрь |
Формат описания дней недели
Дни недели также могут описываться также как с помощью числовых, так и с помощью строковых значений:
Числовое значение | Строковое значение | День недели |
---|---|---|
0 | Sunday | Воскресенье |
1 | Monday | Понедельник |
2 | Tuesday | Вторник |
3 | Wednesday | Среда |
4 | Thursday | Четверг |
5 | Friday | Пятница |
6 | Saturday | Суббота |
Переменные Crontab
Демон cron автоматически устанавливает несколько переменных окружения.
Предопределённые макросы (константы)
Существует несколько специальных макросов (констант) расписания Cron, используемых для определения общих интервалов. Можно использовать эти ярлыки вместо указания даты в пять столбцов.
Выполнение PHP скриптов
# Запуск скрипта в 5 утра каждый день:
0 5 * * * /usr/bin/php -q /home/www/html/script.php
Опция -q
указывает PHP не выдавать HTTP-заголовки.
Запуск PHP скриптов по расписанию Cron
Настройка времени запуска
Примеры заданий Cron почти на все случаи 🙂
* * * * * |
Каждую минуту |
* 0 * * * |
Каждую минуту, между 00:00 и 00:59 |
5,15,30 * * * * |
В 5,15,30 минут каждого часа каждый день |
*/5 * * * * |
Каждые 5 минут |
*/30 * * * * |
Каждые 30 минут (пол часа) |
0 * * * * или @hourly |
Каждый час |
15 * * * * |
Каждый час в 15 минут |
0 * * * 1-5 |
Каждый час по рабочим дням (пн - пт) |
* */2 * * * |
Каждый четный час |
*/30 * * * 1-5 |
Каждые пол часа по рабочим дням (пн - пт) |
30 6 * * * |
Каждый день в 06:30 |
30 6,8,10,12 * * * |
Каждый день в 06:30,08:30,10:30,12:30 |
0 10,12 * * 1,3 |
В понедельник и среду в 10:00 и 12:00 |
0 10,12 * * 1-3 |
С понедельника по среду в 10:00 и 12:00 |
0 0 * * 1-5 |
В полночь с понедельника по пятницу |
0 1 * * 7 |
В час ночи (01:00) с субботы на воскресенье |
0 0 * * 1 |
Каждый понедельник: |
0 1 * * sat |
Каждую субботу в 1 час ночи |
0 9,18 * * 1 |
Каждый понедельник в 9:00 и 18:00 |
0 12 1 * * |
Каждый месяц 1 числа в 12:00 |
15 9 1,15 * * |
В 21:15, 1 и 15 числа каждого месяца |
0 8 * * 3,6 |
В 8:00 по средам и субботам |
0 7 1 * * |
1 числа каждого месяца в 7-00 |
0 12 * * 1 |
В 12-00 по понедельникам |
0 10,11 * * * |
В 10:00 и 11:00 ежедневно |
0 6-18/30 * * * |
Каждые пол часа с 6:00 до 18:00 |
15 9-19/2 * * * |
Каждые 2 часа с 9:15 до 19-15 |
20 8-18/1 * * * |
Каждый час с 8-20 до 18-20 |
10,40 10-16 * * * |
В 10 и 40 минут с 10:00 до 16:00 |
15 7-23 * * * |
С 7:15 до 23:15 в 15 минут каждого часа |
20 4-18/2 * * * |
С 4-20 до 18-20 в 20 минут каждые 2 часа |
*/10 5-22 * * * |
С 5:00 до 22:00 каждые 10 минут |
59 23 31 dec * |
Новый год |
Онлайн редакторы Cron заданий
Онлайн сервисы (редакторы) по подбору синтаксиса для выполнения задания CRON в нужное время:
Предыдущая запись
Подсветка синтаксиса на сайте — Highlight.js
Комментарии (0)