- Cron: краткое пособие для начинающих
- Установка
- Параметры Crontab
- Синтаксис Crontab и операторы
- Формат описания диапазонов числовых значений
- Формат описания месяцев
- Формат описания дней недели
- Переменные Crontab
- Предопределённые макросы (константы)
- Выполнение PHP скриптов
- Настройка времени запуска
- Онлайн редакторы Cron заданий
- Настройка и запуск cron на веб-сервере
- Как задавать время в Cron
- Пример
- Настройка Cron в ISPmanager
- Настройка Cron для запуска PHP-скрипта
- Полезные примеры
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 | Последовательность команд для выполнения. Это могут быть команды, исполняемые файлы (например, скрипты) или комбинации файлов. |
Значение первых пяти полей может быть либо * (звездочкой), что означает все допустимые значения, либо списком элементов, разделенных запятыми. Элемент является либо числовым, либо диапазоном чисел, обозначенным двумя значениями, разделенными тире (например, 10-12).
- * — оператор звездочки означает любое значение или всегда. Если в поле «Час» имеется символ звездочки, это означает, что задание будет выполняться каждый час.
- , — оператор запятой позволяет указать список значений для повторения. Например, если у вас есть 1,3,5 в поле «Час» , задание будет выполняться в 1, 3 и 5 часов утра.
- — — оператор дефиса позволяет указать диапазон значений. Если в поле «День недели» указано значение 1–5 , задание будет выполняться каждый рабочий день (с понедельника по пятницу).
- / — оператор косой черты позволяет указать значения, которые будут повторяться в течение определенного интервала между ними. Например, если в поле «Час» указано */4 , это означает, что действие будет выполняться каждые четыре часа. Это то же самое, что указание 0,4,8,12,16,20 . Вместо звездочки перед оператором косой черты можно также использовать диапазон значений, 1-30/10 означает то же, что и 1,11,21
Формат описания диапазонов числовых значений
Диапазоны числовых значений могут задаваться в следующем формате:
Объявление | Значение |
---|---|
* | Любое числовое значение |
*/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 автоматически устанавливает несколько переменных окружения.
- Путь по умолчанию установлен в PATH=/usr/bin:/bin . Если вызываемая вами команда присутствует в указанном пути cron, вы можете использовать абсолютный путь к команде или изменить переменную cron $PATH .
- Оболочка по умолчанию установлена в /bin/sh . Вы можете установить другую оболочку, изменив переменную SHELL
- Cron вызывает команду из домашнего каталога пользователя. Переменная HOME может быть переопределена настройками в crontab.
- Уведомление по электронной почте отправляется владельцу crontab. Чтобы перезаписать поведение по умолчанию, вы можете использовать переменную среды MAILTO со списком (через запятую) всех адресов электронной почты. Если MAILTO определено, но пусто (MAILTO = «»), письмо не отправляется.
Предопределённые макросы (константы)
Существует несколько специальных макросов (констант) расписания Cron, используемых для определения общих интервалов. Можно использовать эти ярлыки вместо указания даты в пять столбцов.
- @yearly — (или @annually ) — запускать задание один раз в год в полночь (12:00) 1 января. Эквивалент 0 0 1 1 *
- @monthly — запускать задание один раз в месяц в полночь первого дня месяца. Эквивалент 0 0 1 * *
- @weekly — запускать задание раз в неделю в полночь воскресенья. Эквивалент 0 0 * * 0
- @daily — запускать задание один раз в день в полночь. Эквивалент 0 0 * * *
- @hourly — запускать задание один раз в час в начале часа. Эквивалент 0 * * * *
- @reboot — запускать задание при запуске системы (время загрузки)
Выполнение PHP скриптов
# Запуск скрипта в 5 утра каждый день: 0 5 * * * /usr/bin/php -q /home/www/html/script.php
Опция -q указывает PHP не выдавать HTTP-заголовки.
Настройка времени запуска
Примеры заданий 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 в нужное время:
Настройка и запуск cron на веб-сервере
Cron — это программное обеспечение для настройки автоматического выполнения заданий (скриптов) в Unix/Linux подобных системах: Centos, Debian, Ubuntu и других. Этот планировщик задач работает аналогично во всех версиях операционных систем.
Добавить скрипт в Cron можно через специальный файл «crontab», содержащий список заданий для выполнения.
Пример пустого файла crontab
Как задавать время в Cron
Чтобы правильно добавить задание сначала указывается время и периодичность и в конце путь к исполняемому скрипту.
- минута (0-59);
- час (0-23);
- день (1-31);
- месяц (1-12);
- день недели (0-6);
- путь к исполняемому файлу.
Все значения указываются через пробел и при необходимости можно вводить множество значений через запятую.
Пример
Строка следующего вида подразумевает выполнение команды каждый день в 7 утра и 7 вечера:
0 7,19 * * * home/user1/script.sh
Настройка Cron в ISPmanager
Настроить Cron на хостинге проще всего через панель управления. Для примера разберем как производится настройка планировщика в ISPmanager 4.
- Открываем панель управления ISPmanager и переходим в «Планировщик» в разделе «Главное». Далее создаем новое задание, нажимая на кнопку «Создать».
- Заполняем поля в открывшемся редакторе и нажимаем «ОK»:
- Команда — здесь указываем полный путь (директорию) к исполняемому файлу программы или готовому рабочему скрипту.
- Описание — по желанию можно добавить краткое описание выполняемого задания.
- Расписание— добавляем расписание с возможностью выбора режима. Режим «Базовый» — с выбором доступных вариантов и «Экспертный» — самостоятельная настройка.
- Eсли есть возможность, нужно настроить получение отчетов по запуску заданий на почтовый адрес пользователя. Для этого открываем «Планировщик» → «Настройки» → «Адрес e-mail» и указываем адрес почты для получения. После чего нужно убедиться, что в настройках не стоит галочка напротив «Не отправлять отчет по e-mail».
Настройка Cron для запуска PHP-скрипта
В некоторых случаях бывает так, что автоматическое выполнение PHP-скрипта невозможно. Чаще всего подобные ошибки случаются при запуске PHP-скрипта через локальный интерпретатор. В таких случаях требуется запустить Cron вручную, для чего лучше всего использовать программу wget. В приведенном ниже примере «example.com» нужно заменить на реальный путь к вашему PHP-файлу.
0 7,19 * * * /usr/bin/wget -O - -q -t 1 ‘http://example.com/file.php’
Полезные примеры
Разберем уже приведенный выше пример, немного изменив параметры:
0 7,19 3* 7 /usr/bin/wget -O - -q -t 1/ / ‘http://example.com/file.php’ /dev/null/2>&1
Запуск PHP-скрипта будет происходить в 7:00 и 19:00 каждого воскресенья и 3 числа каждого месяца (совпадения дня недели и числа не имеют значения).
/dev/null/2>&1 — эта команда Cron добавляется в конце сценария (строки), для выполнения скрипта в фоновом режиме без уведомлений.
Помимо этого, можно добавлять другие полезные опции в конце строки планировщика Cron. Как например, для отладки запускаемого скрипта, нужен лог-файл выполнений.
То есть, если мы хотим настроить вывод результатов запуска задания Cron в определенный файл, можно изменить команду следующим образом:
0 7,19 3* 7 /usr/bin/wget -O - -q -t 1 ‘http://example.com/file.php’ > /yourdirectory/log.txt
Просмотрев такой лог, можно понять причину, почему Cron не выполняет скрипт.
Надежный хостинг для сайта. 14 дней — бесплатно!