Как планировать задания Cron с помощью Crontab в Linux

12 set 2022 4 min di lettura
Как планировать задания Cron с помощью Crontab в Linux
Indice dei contenuti

Введение

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 и планировать задачи на определенную дату и время.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.