Планировщик событий Cron в таблице Crontab
Планировщик событий Cron в таблице Crontab
Scheduling Cron Jobs with Crontab
Cron - это демон планирования (компьютерная программа в системах класса UNIX), который выполняет задачи с заданными интервалами. Эти задачи называются заданиями cron и в основном используются для автоматизации обслуживания или администрирования системы.

Например, вы можете установить задание cron для автоматизации повторяющихся задач, таких как резервное копирование баз данных или данных, обновление системы последними обновлениями безопасности, проверка использования дискового пространства , отправка электронных писем и так далее. В некоторых приложениях, таких как Drupal или Magento , для выполнения определенных задач требуются задания cron.
Задания cron могут быть запланированы по минуте, часу, дню месяца, месяцу, дню недели или любой их комбинации.
Что такое файл Crontab
Crontab (таблица cron) представляет собой текстовый файл, который определяет расписание заданий cron. Существует два типа файлов crontab. Общесистемные файлы crontab и отдельные пользовательские файлы crontab.
Файлы crontab пользователей хранятся под именем пользователя, и их расположение зависит от операционной системы. В системах на базе Red Hat, таких как CentOS, файлы crontab хранятся в /var/spool/cron
каталоге, а в Debian и Ubuntu - в /var/spool/cron/crontabs
каталоге.
Хотя вы можете редактировать пользовательские файлы crontab вручную, рекомендуется использовать crontab
команду.
/etc/crontab
и файлы внутри /etc/cron.d
каталога являются общесистемными файлами crontab, которые могут редактировать только системные администраторы.
В большинстве дистрибутивов Linux вы также можете поместить скрипты в /etc/cron.{hourly,daily,weekly,monthly}
каталоги, и скрипты будут выполняться каждый hour/day/week/month
.
Синтаксис Crontab и операторы
Каждая строка в пользовательском файле crontab содержит шесть полей, разделенных пробелом, за которым следует команда, которую нужно выполнить.
* * * * * command(s)
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)
Первые пять полей могут содержать одно или несколько значений, разделенных запятой или диапазон значений, разделенных дефисом.
*
Оператор звездочки означает любое значение или всегда. Если у вас есть символ звездочки в поле Час, это означает, что задание будет выполняться каждый час.,
Оператор запятой позволяет указать список значений для повторения. Например, если у вас есть1,3,5
поле «Час», задание будет выполняться в 1:00, 3:00 и 5:00.-
Оператор дефиса позволяет указать диапазон значений. Если у вас есть1-5
поле «День недели», задание будет запускаться каждый рабочий день (с понедельника по пятницу)./
Оператор косой черты позволяет указать значения, которые будут повторяться в течение определенного интервала между ними. Например, если у вас есть*/4
поле «Час», это означает, что действие будет выполняться каждые четыре часа. Это то же самое, что указать0,4,8,12,16,20
. Вместо звездочки перед оператором косой черты вы также можете использовать диапазон значений,1-30/10
то же самое, что и1,11,21
.
Общесистемные файлы Crontab
Синтаксис общесистемных файлов crontab немного отличается от пользовательских crontabs. Он содержит дополнительное обязательное поле пользователя, которое указывает, какой пользователь будет запускать задание cron.
* * * * * <username> command(s)
Предопределенные макросы
Существует несколько специальных макросов расписания Cron, используемых для определения общих интервалов. Вы можете использовать эти ярлыки вместо указания даты в пять столбцов.
@yearly
(или@annually
) - запускать задание один раз в год в полночь (12:00) 1 января. Эквивалент0 0 1 1 *
.@monthly
- запускать указанное задание один раз в месяц в полночь первого дня месяца. Эквивалент0 0 1 * *
.@weekly
- запускать указанное задание один раз в неделю в полночь воскресенья. Эквивалент0 0 * * 0
.@daily
- запускать указанное задание один раз в день в полночь. Эквивалент0 0 * * *
.@hourly
- запускать указанное задание один раз в час в начале часа. Эквивалент0 * * * *
.@reboot
- Запустите указанное задание при запуске системы (время загрузки).
Linux Crontab Command
Команда crontab позволяет установить или открыть файл crontab для редактирования.
Вы можете использовать команду crontab для просмотра, добавления, удаления или изменения заданий cron, используя следующие параметры:
crontab -e
- Отредактируйте файл crontab или создайте его, если он еще не существует.crontab -l
- Показать содержимое файла crontab.crontab -r
- Удалить ваш текущий файл crontab.crontab -i
- Удалите текущий файл crontab с запросом перед удалением.crontab -u <username>
- Изменить другой файл crontab использования. Требуются права системного администратора.
Команда crontab открывает файл crontab с помощью редактора, заданного переменными среды VISUAL
или EDITOR
.

Переменные Crontab
Демон cron автоматически устанавливает несколько переменных окружения .
- Путь по умолчанию установлен в
PATH=/usr/bin:/bin
. Если команда, которую вы вызываете, присутствует в указанном пути cron, вы можете использовать абсолютный путь к команде или изменить$PATH
переменную cron . Вы не можете неявно добавлять,:$PATH
как если бы вы использовали обычный скрипт. - Оболочка по умолчанию установлена в
/bin/sh
. Вы можете установить другую оболочку, изменивSHELL
переменную. - Cron вызывает команду из домашнего каталога пользователя.
HOME
Переменной может быть изменено с помощью настроек в crontab. - Уведомление по электронной почте отправляется владельцу crontab. Чтобы перезаписать поведение по умолчанию, вы можете использовать
MAILTO
переменную среды со списком (через запятую) всех адресов электронной почты, которые вы хотите получать по электронной почте. ЕслиMAILTO
определено, но пусто (MAILTO=""
), письмо не отправляется.
Crontab Ограничения
Системные администраторы могут контролировать , какие пользователи имеют доступ к crontab
команде при помощи функции /etc/cron.deny
и /etc/cron.allow
файлы. Файлы состоят из списка имен пользователей, по одному имени пользователя в строке.
По умолчанию только /etc/cron.deny
файл существует и является пустым, что означает, что все пользователи могут использовать команду crontab. Если вы хотите запретить доступ к командам crontab конкретному пользователю, добавьте имя пользователя в этот файл.
Если /etc/cron.allow
файл существует, только пользователи, перечисленные в этом файле, могут использовать crontab
команду.
Если ни один из этих файлов не существует, команду могут использовать только пользователи с правами администратора crontab
.
Примеры Cron
Ниже приведены некоторые примеры заданий cron, которые покажут вам, как запланировать выполнение задачи на разные периоды времени.
-
Запускайте команду в 15:00 каждый день с понедельника по пятницу:
0 15 * * 1-5 command
-
Запускать скрипт каждые 5 минут и перенаправлять стандартный вывод на
dev null
, только стандартная ошибка будет отправлена на указанный адрес электронной почты:
MAILTO=email@example.com */5 * * * * /path/to/script.sh > /dev/null
-
Выполните две команды каждый понедельник в 3 часа дня (используйте оператор
&&
между командами):
0 15 * * Mon command1 && command2
-
Запускайте PHP-скрипт каждые 2 минуты и записывайте результат в файл :
*/2 * * * * /usr/bin/php /path/to/script.php >> /var/log/script.log
-
Запускать сценарий каждый день, каждый час, каждый час, с 8:00 до 16:00:
00 08-16 * * * /path/to/script.sh
-
Запускать сценарий в первый понедельник каждого месяца в 7 часов утра.
0 7 1-7 * 1 /path/to/script.sh
-
Запускайте сценарий в 21:15 1 и 15 числа каждого месяца:
15 9 1,15 * * /path/to/script.sh
-
Набор пользовательских
HOME
,PATH
,SHELL
иMAILTO
переменные и запустить команду каждую минуту.
HOME=/opt PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin SHELL=/usr/bin/zsh MAILTO=email@example.com */1 * * * * command
Вывод
Вы узнали, как создавать задания cron и планировать задачи на определенную дату и время.