
Cron — это демон-планировщик, который выполняет задачи с заданными интервалами. Эти задачи называются заданиями cron и в основном используются для автоматизации обслуживания или администрирования системы.
Например, вы можете настроить cron-задание для автоматизации повторяющихся задач, таких как резервное копирование баз данных или данных, обновление системы с помощью последних исправлений безопасности, проверка использования дискового пространства , отправка электронных писем и т. д.
Задания cron можно запланировать на запуск по минутам, часам, дням месяца, месяцам, дням недели или по любой их комбинации.
Что такое файл Crontab
Crontab (таблица cron) — это текстовый файл, определяющий расписание заданий cron. Существует два типа файлов 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, 3, 5, задача будет запущена в 1, 3 и 5 часов утра. -
-Оператор дефис позволяет указать диапазон значений. Если в поле «День недели» указано значение1-5, задача будет запускаться каждый будний день (с понедельника по пятницу). -
/— Оператор слэш позволяет указать значения, которые будут повторяться с определённым интервалом. Например, если в поле «Час» указано*/4, это означает, что действие будет выполняться каждые четыре часа. Это то же самое, что указать0,4,8,12,16,20. Вместо звёздочки перед оператором слэш можно также использовать диапазон значений:1-30/10означает то же самое, что и1,11,21.
Общесистемные файлы Crontab
Синтаксис общесистемных файлов crontab немного отличается от пользовательских. Он содержит дополнительное обязательное поле, указывающее, какой пользователь будет запускать cron-задание.
* * * * * 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 -e— Редактировать файл crontab или создать новый, если он еще не существует. -
crontab -l— Отображение содержимого файла crontab. -
crontab -r— удалить текущий файл crontab. -
crontab -i— удаление текущего файла crontab с выводом запроса перед удалением. -
crontab -u— редактирование файла 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 позволяют контролировать доступ пользователей к команде crontab . Эти файлы содержат список имён пользователей, по одному имени в каждой строке.
По умолчанию существует только файл /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 -
Выполняйте две команды каждый понедельник в 15:00 (используйте оператор
&&между командами):0 15 * * Mon command1 && command2 -
Запускать PHP-скрипт каждые 2 минуты и записывать вывод в файл :
*/2 * * * * /usr/bin/php /path/to/script.php >> /var/log/script.log -
Запускать скрипт каждый день, каждый час, с 8 утра до 4 вечера:
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 — это демон, позволяющий планировать задачи на определенную дату и время.
Если у вас есть вопросы, не стесняйтесь оставлять комментарии.
Связанные руководства