Введение

Cron — это хронологический демон-планировщик задач, работающий в операционных системах типа Unix, включая дистрибутивы Linux. Cron запускается в фоновом режиме, а задачи, запланированные в cron и именуемые «задачи cron», выполняются автоматически, что делает cron полезным для автоматизации связанных с обслуживанием задач.

Особенности среды

Все команды выполнялись в Ubuntu 22.04, если ваша машина имеет другую ОС, команды могут отличаться.

Установка cron

Большинство дистрибутивов linux имеют уже установленный cron по умолчанию, но если вы используете Ubuntu, где cron не установлен, его можно установить с помощью пакетного менеджера apt

Перед установкой cron, требуется выполнить обновление баз данных пакетов:

sudo apt update

Далее нужно выполнить установку cron:

sudo apt install cron

После чего, может потребоваться активировать автозапуск сервиса:

sudo systemctl enable

Пользовательский cron

Cron задачи, записываются в специальный файл:

/var/spool/cron/crontabs/$USER

Управление cron заданиями происходят через утилиту crontab:

$ crontab --help
usage:  crontab [-u user] file
        crontab [ -u user ] [ -i ] { -e | -l | -r }
                (default operation is replace, per 1003.2)
        -e      (edit user's crontab)
        -l      (list user's crontab)
        -r      (delete user's crontab)
        -i      (prompt before deleting user's crontab)

Таким образом, что бы добавить новое задание, требуется выполнить команду:

crontab -e

Если команда crontab -e запускается впервые в этом профиле пользователя, вы сможете выбрать используемый по умолчанию текстовый редактор для использования при редактировании crontab:

no crontab for oldtyt - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/vim.basic
  3. /usr/bin/vim.tiny
  4. /bin/ed

Choose 1-4 [1]:

Требуется ввести число, соответствующее нужному вам редактору, в случае если вы просто нажмете ENTER, будет использоваться вариант по умолчанию - nano

Пример cron:

* * * * * CMD
  • CMD - команда, которая будет выполняться ежеминутно

Системный cron

Системный cron представляет собой файлы и директории:

  • /etc/crontab: Этот файл используется для запуска скриптов в определенное системное время. Есть возможность указать конкретного пользователя для выполнения задания.

  • /etc/cron.d/: Директория для размещения отдельных файлов расписания крона, которые обрабатываются как конфигурационные файлы. Используется для организации служебных скриптов и системных заданий, что позволяет легко добавлять и удалять расписания без редактирования одного файла. Есть возможность указать конкретного пользователя для выполнения задания.

  • /etc/cron.daily/: В этой директории размещаются скрипты, запускаемые ежедневно. Она предназначена для заданий, не требующих точного времени исполнения, но нуждающихся в выполнении один раз в день (например, резервное копирование данных).

  • /etc/cron.hourly/: Сюда помещаются скрипты для заданий, которые должны выполняться каждый час. Похоже на cron.daily, но используется для более частых операций.

  • /etc/cron.weekly/: Задания в этой директории запускаются еженедельно. Идеально подходит для тех операций, которые должны выполняться регулярно, но не слишком часто, например, обновление системных баз данных или недельное сканирование на вирусы.

  • /etc/cron.monthly/: В этой папке находятся скрипты для месячных заданий. Это удобно для долгосрочных операций, таких как анализ логов или архивация устаревших данных.

Пример cron задания для /etc/crontab или /etc/cron.d/:

* * * * * SOME_USER CMD
  • SOME_USER - имя пользователя под которым нужно выполнить команду
  • CMD - команда, которая будет выполняться ежеминутно

Синтаксис cron

Все задачи, запланированные в cron имеют следующий вид:

minute hour day_of_month month day_of_week SOME_USER CMD
  • SOME_USER - имя пользователя под которым нужно выполнить команду(только в системном cron)
ПолеДопустимые значения
minute0-59
hour0-23
day_of_month1-31
month1-12 или JAN-DEC
day_of_week0-6 или SUN-SAT

Для лучшего понимания, ниже приведены примеры:

  • * * * * * — запускать команду каждую минуту
  • 20 * * * * — запускать команду в 20 минут каждого часа
  • 0,15,30,45 * * * * — запускать команду каждые 15 минут
  • */15 * * * * — запускать команду каждые 15 минут
  • 0 5 * * * — запускать команду каждый день в 5:00
  • 0 5 * * 4-6 — запускать команду каждую пятницу, субботу и воскресенье в 5:00 22,44 */3 * 1-6 * — запускать команду в 22-ю и 44-ю минуту каждого 3-го часа каждый день первых 6 месяцев года

Так же стоит отметить, что есть и сокращённая форма записи:

Сокращенная записьПолная запись
@hourly0 * * * *
@daily0 0 * * *
@weekly0 0 * * 0
@monthly0 0 1 * *
@yearly0 0 1 1 *