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
Проверка статуса Cron:
sudo service cron status
# или
sudo systemctl status cron
# sudo systemctl status cron.service
# или
sudo /etc/init.d/crond status
Команды управления Cron:
# Запустить
sudo service cron start
# Перезапустить (остановка и запуск)
sudo service cron restart
# Перечитать конфигурацию (без полного перезапуска)
sudo service cron reload
# Остановить
sudo service cron stop
Параметры 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).
Формат описания диапазонов числовых значений
Диапазоны числовых значений могут задаваться в следующем формате:
Объявление | Значение |
---|---|
* |
Любое числовое значение |
*/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-заголовки.
Настройка времени запуска
Примеры заданий Cron почти на все случаи:
* * * * * |
Каждую минуту |
* 0 * * * |
Каждую минуту, между 00:00 и 00:59 |
5,15,30 * * * * |
В 5,15,30 минут каждого часа каждый день |
*/5 * * * * |
Каждые 5 минут |
*/30 * * * * |
Каждые 30 минут (пол часа) |
0 * * * * или @hourly |
Каждый час 👉 Запуск задания Cron каждый час |
0 */3 * * * |
Каждые 3 часа |
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 в нужное время:
Комментарии (0)
Пока еще не было комментариев ✍️