Как запланировать периодическую задачу с помощью cron

Эта статья была первоначально опубликована на Everything DevOps.

cron — это утилита для составления расписания на основе времени. С помощью cron можно запускать рутинные фоновые задания в определенное время, дни, месяцы и т.д. на постоянной основе. Запущенные задания называются заданиями cron.

Утилита cron управляется конфигурационным файлом /etc/crontab (cron table), который содержит различные команды оболочки, которые должны выполняться в запланированное время.

Существует два типа файлов crontab, общесистемные файлы crontab и индивидуальные пользовательские файлы crontab. Каждая строка файла crontab представляет собой задание и состоит из выражения cron, за которым следует команда shell для выполнения.

В этой статье вы:

  • увидите несколько вариантов использования утилиты cron,
  • поймете структуру файла crontab, а затем
  • узнаете, как запланировать периодическое задание в Linux с помощью cron.

Необходимые условия

Чтобы следовать этой статье, вам необходим доступ к терминальному окну дистрибутива Linux. В данной статье используется дистрибутив Linux Ubuntu 22.04 (LTS) x64.

Использование cron

Есть несколько случаев, когда вы, как пользователь Linux, захотите запланировать задачи с помощью cron; вот несколько из них:

  • Запланировать автоматические обновления.
  • Резервное копирование данных в определенное время часа, дня, месяца, года и т.д.
  • И многое другое.

Понимание файла crontab

Чтобы понять, что такое файл crontab, в окне терминала вашей машины Linux выполните приведенную ниже команду, чтобы распечатать содержимое конфигурационного файла /etc/crontab.

$ cat /etc/crontab
Войти в полноэкранный режим Выйти из полноэкранного режима

После выполнения команды вы получите результат, аналогичный приведенному ниже изображению.

Изображение выше — это файл crontab. Каждая строка, не закомментированная символом #, является заданием cron, как показано на аннотированном изображении ниже.

Для каждого задания cron в аннотированной части выше есть несколько разделов, и каждый раздел отвечает за определенный аспект планирования задания.

Структура задания **cron**
Чтобы объяснить разделы в задании cron, вот первое задание в приведенном выше crontab-файле:

17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
Войти в полноэкранный режим Выйти из полноэкранного режима

В приведенном выше задании cron временной интервал 17 * * * * (выражение cron) означает выполнение в 17 минут после каждого часа. И задание должно перейти в каталог / (корень файловой системы). Затем, как пользователь root, запустить двоичный файл run-parts для выполнения всех заданий в файле /etc/cron.hourly.

Как видно выше, в заданиях cron временные интервалы обозначаются цифрами, а вместо каждой звездочки заполняются операторы. Слева направо звездочки обозначают:

  • Минута задается в виде числа от 0 до 59.
  • Час задается в виде числа от 0 до 23.
  • День месяца — число от 1 до 31.
  • Месяц задается цифрами от 1 до 12 OR jan, feb, mar, apr и т.д.
  • День недели задается числами от 0 до 7, причем воскресенье = (0 или 7) ИЛИ sun, mon, tue, wed, thu, fri, sat.

Чтобы узнать больше о выражениях cron, смотрите man-страницу crontab.

Создание задания cron

Для создания и управления заданиями cron необходимо отредактировать файл crontab с помощью команды crontab — специальной команды для системы crontab.

Чтобы создать задание cron, в окне терминала выполните приведенную ниже команду для редактирования файла crontab:

$ crontab -e
Войти в полноэкранный режим Выйти из полноэкранного режима

После выполнения приведенной выше команды вам будет предложено выбрать редактор, который вы хотите использовать для редактирования файла crontab, как показано на рисунке ниже.

Нажмите Enter, чтобы выбрать редактор по умолчанию — nano, самый простой в использовании редактор.

Редактирование файла crontab для создания заданий **cron**
После нажатия клавиши Enter файл crontab вошедшего в систему пользователя откроется в редакторе nano, как показано на рисунке ниже.

Аннотированная часть изображения /tmp/crontab.YgyqTN/crontab показывает, что вы редактируете временный файл, который после сохранения станет настоящим файлом crontab.

Далее прокрутите вниз до конца crontab, чтобы создать задание cron в строке с мигающим курсором (каретка), как показано на рисунке ниже:

Затем добавьте в кронтаб задание cron.

Добавление задания **cron** в кронтаб
Для демонстрации ниже приведено задание cron, которое будет выполнять команду в 11:13 утра каждый день.

13 11 * * * echo "this is a test job" > testfile.txt
Войти в полноэкранный режим Выйти из полноэкранного режима

Команда в приведенном выше задании cron заключается в создании и записи "this is a test job" в testfile.txt.

После добавления задания cron в кронтаб, вы используете CTRL + O для сохранения файла, а затем CTRL + X для выхода из редактора nano, как показано на рисунке ниже.

На момент написания этой статьи время 11:09 AM:

И когда я выполняю команду list files ls, файла testfile.txt не существует:

Но когда он достигает или проходит время 11:13 AM, я вижу, что файл testfile.txt был создан и записан.

Просмотр заданий cron в файле crontab

Чтобы просмотреть задания cron в файле crontab для текущего вошедшего пользователя, в терминале выполните команду:

$ crontab -l
Войти в полноэкранный режим Выйти из полноэкранного режима

После выполнения вышеуказанной команды вы увидите задания cron в хвостовой части файла, как показано на рисунке ниже.

Заключение

В этой статье вы узнали об утилите командной строки cron, файле crontab и о том, как создавать задания cron для планирования периодических задач. В cron можно сделать гораздо больше, например, запускать задания от имени других пользователей, перенаправлять сообщения заданий cron и т.д.

Ресурсы

Чтобы узнать больше о cron, ознакомьтесь со следующими ресурсами:

  • Как я использую cron в Linux
  • Как использовать cron в Linux
  • Linux Essentials — Cron

Оцените статью
Procodings.ru
Добавить комментарий