Введение
Cron — это демон планирования, который выполняет задачи через определенные промежутки времени. Эти задачи называются заданиями cron и в основном используются для автоматизации обслуживания или администрирования системы.
Например, вы можете настроить задание cron для автоматизации повторяющихся задач, таких как резервное копирование баз данных или данных, обновление системы с помощью последних исправлений безопасности, проверка использования дискового пространства, отправка электронных писем и так далее. Некоторым приложениям, таким как Drupal, Wordpress или Magento, для выполнения определенных задач требуются задания cron.
Задания могут быть запланированы для хронического выполнения по минутам, часам, дням месяца, месяцам, дням недели или любой их комбинации.
Что такое Кронтаб
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 до1-5
, задача будет выполняться каждый рабочий день (с понедельника по пятницу)./
— Оператор косой черты позволяет указать значения, которые будут повторяться через определенный интервал между собой. Например, если у вас в поле «Час» стоит*/4
, это означает, что действие будет выполняться каждые четыре часа. Это то же самое, что указать0,4,8,12,16,20
. Вместо звездочки перед оператором косой черты можно также использовать диапазон значений,1-30/10
— это то же самое, что1,11,21
.
Общесистемный файл Crontab
Синтаксис общесистемных файлов crontabs немного отличается от пользовательских 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
Команда 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, вы можете использовать абсолютный путь команды или изменить переменную cron$PATH
. Вы не можете неявно добавить:$PATH
, как в обычном скрипте. - Оболочкой по умолчанию является
/bin/sh
. Вы можете установить другую оболочку, изменив переменнуюSHELL
. - Cron вызывает команду из домашнего каталога пользователя. Переменная
HOME
может быть переопределена настройками в crontab. - Уведомление по электронной почте отправляется владельцу crontab. Чтобы переопределить поведение по умолчанию, вы можете использовать переменную среды
MAILTO
со списком (через запятую) всех адресов электронной почты, на которые вы хотите получать уведомления по электронной почте. ЕслиMAILTO
определен, но пуст (MAILTO=""
), почта не отправляется.
Кронтаб ограничения
Системные администраторы могут контролировать, какие пользователи имеют доступ к команде 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
, на указанный адрес электронной почты будет отправлено только стандартное сообщение об ошибке:
[email protected]
*/5 * * * * /path/to/script.sh > /dev/null
Запускайте две команды каждый понедельник в 15:00 (используйте оператор &&
между командами):
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
[email protected]
*/1 * * * * command
Вывод
Вы узнали, как создавать задания cron и планировать задачи на определенную дату и время.