Введение
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
)
Поле | Допустимые значения |
---|---|
minute | 0-59 |
hour | 0-23 |
day_of_month | 1-31 |
month | 1-12 или JAN-DEC |
day_of_week | 0-6 или SUN-SAT |
Для лучшего понимания, ниже приведены примеры:
* * * * *
— запускать команду каждую минуту20 * * * *
— запускать команду в 20 минут каждого часа0,15,30,45 * * * *
— запускать команду каждые 15 минут*/15 * * * *
— запускать команду каждые 15 минут0 5 * * *
— запускать команду каждый день в 5:000 5 * * 4-6
— запускать команду каждую пятницу, субботу и воскресенье в 5:0022,44 */3 * 1-6 *
— запускать команду в 22-ю и 44-ю минуту каждого 3-го часа каждый день первых 6 месяцев года
Так же стоит отметить, что есть и сокращённая форма записи:
Сокращенная запись | Полная запись |
---|---|
@hourly | 0 * * * * |
@daily | 0 0 * * * |
@weekly | 0 0 * * 0 |
@monthly | 0 0 1 * * |
@yearly | 0 0 1 1 * |