Введение
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 * |