- Использование планировщика cron в Linux
- 1. Введение
- 2. Инсталляция cron
- 3. Использование cron
- 3.1. Crontab
- 3.1.1. Пример
- 3.1.2. Поля crontab
- 3.2. Взгляд на /etc/
- 3.2.1. Скрипты cron
- 4. Размышления о безопасности
- 5. Примеры использования cron
- 6. Заключение
- 18 примеров команды crontab
- Синтаксис Crontab
- Как изменить расписание
- Как узнать список заданий Crontab
- Примеры
- 1. Ежедневно в 2 часа ночи.
- 2. Дважды в день
- 3. Каждую минуту
- 4. Каждое воскресенье в 17:00
- 5. Каждые 10 минут
- 6. Определенные месяцы
- 7. Определенные дни
- 8. Первое воскресенье каждого месяца.
- 9. Каждые четыре часа.
- 10. Дважды в каждое воскресенье и понедельник.
- 11. Несколько задач
- 12. Ежегодно (@yearly)
- 13. Ежемесячно (@monthly)
- 14. Еженедельно (@weekly)
- 15. Ежедневно (@daily)
- 16. Ежечасно (@hourly).
- 17. Выполнение задач при перезагрузке системы (@reboot).
- 18. Отправка результатов заданий на электронную почту
- Настройка планировщика задач Cron в CentOS Linux
- Установка cron в Linux
- Crontab: добавление задания в планировщик cron
- Отправка уведомлений cron на e-mail
- Файлы конфигурации и логи планировщика cron
Использование планировщика cron в Linux
1. Введение
Если вы уже имеете некоторый опыт системного администрирования Linux, то должны знать, что такое cron и для чего он предназначен. Если же вы только начинаете работать с Linux, то эти знания вам пригодятся. Даже если вы уже изучали использование cron, данная статья поможет вам освежить знания.
Название cron происходит от Cronos, древнегреческого олицетворения времени. И это правильно выбранное имя, так как основным предназначением cron является помощь в планировании различных задач, которые система должна выполнить в заданное время. Если вы пользовались Windows, то вероятно вам приходилось копаться в утилите Scheduled Tasks. В целом назначение у программ аналогичное, но реализация разная. Cron предназначен для серьезных задач системного администрирования и обладает большей гибкостью. В качестве примера реальной задачи можно привести резервное копирование. Понравится ли вам вручную выполнять резервное копирование данных на нескольких сотнях машин? Думаю, нет. Вы просто пишете простой скрипт с использованием rsync, планируете его выполнение, например ежедневно, и забываете об этом. Все, что необходимо в дальнейшем — время от времени проверять логи. Некоторые даже используют cron для напоминания о важных личных событиях, например о днях рождения. Но cron — это просто демон, запускающий указанные вами задания. А имеется ли утилита, помогающая редактировать/добавлять/удалять эти задачи? Конечно имеется, и называется она crontab (от cron table). Однако будем двигаться вперед последовательно и начнем с инсталляции.
2. Инсталляция cron
Большинство дистрибутивов используют Vixie Cron и некоторые другие производные как дефолтную реализацию cron, и именно их мы будем рассматривать в этой статье. Кроме того, практически во всех дистрибутивах cron уже предустановлен, так как он является очень важной частью системы Linux. Хотя обычный пользователь, как правило, никогда не работает с ним напрямую, система и многие приложения используют cron (хорошим примером является периодическое обновление базы данных man-страниц). Значимым исключением является Gentoo, где необходимо вручную установить vixie-cron и добавить его в runlevel по умолчанию. В Arch, Debian, Slackware, Ubuntu, Fedora и OpenSUSE cron установлен по умолчанию и автоматически запускается при загрузке системы. Мы надеемся, что вы изучите man-страницы cron и crontab, так как во многих дистрибутивах используются их пропатченные версии, что делается для лучшей интеграции программы под конкретный дистрибутив. Поэтому существует вероятность, что функция, которая имеется например в Gentoo, будет недоступна в Slackware. В любом случае, нет ничего лучше чтения man-страниц, особенно если имеешь дело с новой программой, которую собираешься достаточно часто использовать.
3. Использование cron
Во-первых, мы должны убедиться, что cron запущен:
Если в выводе ничего не будет, проверьте, запущен ли cron, и добавьте его в службы, запускаемые по умолчанию, чтобы он стартовал при следующей загрузке. Как это сделать, зависит от дистрибутива. В системах Debian команда должна вывести примерно следующее:
Теперь заставим cron работать. Сначала необходимо подумать о том, какую команду мы будем использовать. Требует ли она привилегий root? Предположим, мы будем использовать crontab, чтобы добавить простой скрипт на выполнение через каждые пять минут как простой пользователь.
3.1. Crontab
3.1.1. Пример
Напишем простой скрипт, который будет выводить обычное диалоговое окно на базе curses в терминале (требуется dialog и любой эмулятор терминала — мы используем xterm):
Назовем файл crontest.sh и сделаем его исполняемым, так как все, что запускается с помощью cron, должно быть исполняемым:
Теперь нам нужно отредактировать пользовательскую таблицу crontab, чтобы добавить запись для нашего замечательного скрипта:
-e ставится для редактирования, -r — для удаления. Будьте очень осторожны! Многие системные администраторы по неосторожности вводили -r вместо -e, тем более что эти клавиши расположены рядом, и удаляли все записи из crontab. В любом случае, скорее всего вы увидите полностью закоментированный файл (в crontab для обозначения комментариев используется #), в котором приведены примеры и описаны назначения полей записей. Да, запись состоит из полей, последнее из которых задает исполняемую команду, а остальные — временные характеристики. Итак, наша запись в crontab для скрипта, запускаемого каждые пять минут, выглядит следующим образом:
Нам необходимо экспортировать переменную DISPLAY, чтобы xterm не выдавал ошибки вида «DISPLAY is not set». Теперь посмотрим назначение каждого поля.
3.1.2. Поля crontab
Если вы работали ранее с символами для подстановки, то вам не составит труда освоить использование звездочки в crontab: она означает, что вместо нее подставляются все возможные значения поля. Поля по умолчанию в Linux (будьте внимательны, некоторые Unix-системы используют другие реализации cron) обозначают, слева направо: минуту, час, день месяца, месяц, день недели, год (необязательно) и исполняемую команду. Таким образом, если мы хотим, чтобы наш скрипт запускался каждые пять минут, каждый час, каждый день, каждый месяц и каждый год, наша запись должна выглядеть так:
Мы призываем вас быть осторожнее с полем дня недели: в вашей стране первым днем недели может быть понедельник, а в других странах им может быть воскресенье. Если работаешь в мультикультурной, многонациональной среде, необходимо помнить о культурных и религиозных особенностях. Cron отправляет уведомления пользователю, которому принадлежит запись, на его почтовый адрес по умолчанию ($user@$hostname). Если вы хотите изменить адрес электронной почты, просто добавьте «MAILTO=$email_address» в crontab. Если вы хотите отключить эту функцию, добавьте «>/dev/null 2>&1» в конец записи.
Теперь, если вы уже устали от всплывающего каждые пять минут окна, снова запустите crontab -e, чтобы удалить или, что проще, закомментировать запись. Чтобы просмотреть содержимое crontab, просто используйте опцию -l (list).
3.2. Взгляд на /etc/
3.2.1. Скрипты cron
В предыдущих разделах мы решали простые и тривиальные задачи, просто для разминки, а теперь мы уже займемся серьезными делами. Заголовок данного раздела относится к директориям в /etc, которые отвечают за периодические задачи по обслуживанию системы. Например, в директории /etc/cron.weekly имеется скрипт man-db, который обновляет базу данных man-страниц. Все подобные скрипты включены в состав дистрибутива и запускаются согласно файлу /etc/crontab. Поэтому, если вы хотите разобраться их работе, лучше всего изучить содержимое этого файла. Вы увидите записи, похожие на те, что мы делали ранее, но исполняемые команды будут отличаться. «run-parts» — это небольшая утилита, созданная для запуска всех скриптов в заданном каталоге.
Внимательный читатель может заметить, что в /etc/crontab имеется одно поле, которого мы не видели при редактировании своего crontab — это поле «user». Это сделано по соображениям безопасности. Если вы вводите команду crontab -e как $user, это значит, что любая команда запускается от имени $user. Но так как /etc/crontab относится ко всей системе, необходимо явно задавать пользователя, так как может потребоваться запускать определенные скрипты или программы от имени другого пользователя, а не от root, особенно если системный администратор заботится о безопасности и добавляет пользователей и группы в систему по мере необходимости. Пример: для резервного копирования не нужны все привилегии root, требуются только права на чтение и запись в определенные директории, поэтому администратор создает группу backup и пользователя backupadmin с необходимыми правами и запускает ночные скрипты резервного копирования с помощью записи:
Эта запись запускает скрипт nightlybkup.sh каждую ночь в 23:30. Если мы захотим запускать резервное копирование только с понедельника по пятницу, нужно отредактировать нашу запись:
Если вы захотите запускать резервное копирование только по понедельникам, средам и пятницам, замените «1-5» на «1,3,5». Когда вы точно знаете, что вам нужно, cron становится понятным и простым в использовании.
4. Размышления о безопасности
Существует множество ситуаций, когда вы не хотите, чтобы пользователь, имеющий доступ к вашей системе, имел возможность создавать записи crontab. Здесь в игру вступают файлы /etc/cron.deny и /etc/cron.allow. Их использование аналогично /etc/hosts.allow и /etc/hosts/deny, поэтому, если вы работали с этими файлами раньше, то будете чувствовать себя как дома. Этих двух файлов (cron.deny и cron.allow) по умолчанию нет в системе, по крайней мере на системе, в которой мы работаем, поэтому по умолчанию всем разрешено создавать записи в crontab. Вы можете проверить, какие файлы, относящиеся к cron имеются в вашем каталоге /etc с помощью команды:
И снова напоминаем, что все сказанное справедливо для Linux, так как отсутствие этих файлов на Solaris означает прямо противоположное, кроме того, файлы расположены в других местах. Сначала проверяется cron.allow, поэтому обычно мы вводим «ALL» в cron.deny, а затем добавляем пользователей, которым мы хотим предоставить доступ, в cron.allow.
5. Примеры использования cron
Команда будет выполняться каждую минуту, день и месяц.
Эта команда будет запускать скрипт checkdrive.sh в 02:30 каждое 10 число января, июня и декабря.
Только по выходным:
Команда будет выполняться каждый день в 11:20 и 16:20.
Каждый час в один конкретный день:
Команда будет запускаться каждый час каждое 2-е мая.
Каждые 10 минут во время пяти рабочих дней (понедельник — пятница):
Только в рабочее время:
Эта команда будет выполняться один раз в день с 9 до 17 часов.
Один раз в году, в полночь 1-го января:
Дважды в год в 12:00 и в 24:00
Эта команда будет исполняться дважды в год (каждые 6 месяцев) в 12:00 и в 24:00.
Каждый третий четверг любого заданного месяца в 10:00:
Каждый день через 20 минут после каждого четного часа:
Эта команда будет выполняться каждый день через 20 минут после каждого четного часа (0:20, 2:20. 22:20).
6. Заключение
Если в начале вам показалось, что записи crontab трудны для понимания и запутаны, уверяю, что при их постоянном использовании вы очень скоро будете наизусть помнить порядок и назначение всех полей, а также название и расположение всех файлов, которые необходимо редактировать. Все, что требуется — это практика.
Источник
18 примеров команды crontab
Cron (Command Run ON) — утилита для автоматического запуска программ и скриптов на сервере в определённое время. Cron очень полезен для рутинных задач, таких как сканирование системы, ежедневное резервное копирование и т.д. Cron автоматически выполняет задания в бэкенде в указанное время. Управлять cron нужно с помощью crontab. В этой статье вы увидите 18 полезных примеров команды crontab.
Синтаксис Crontab
Crontab имеет шесть полей. 1-5 поля определяют дату и время исполнения. 6 поле используется для команды/скрипта. Синтаксис выглядит следующим образом:
- * — соответствует чему угодно
- День недели в другом формате: mon, tue, wed
- Месяц в другом формате: jan, feb, mar
- Несколько значений в поле: 1,5,7 или mon,fri
- Диапазон: 1-10 или 20-30 или sun-fri или feb-apr
- Несколько диапазонов: jan-mar,jul-sep
Как изменить расписание
Чтобы добавить или обновить задания в crontab, используйте команду ниже. Откроется текстовый файл с заданиями crontab, где их можно будет редактировать.
По умолчанию откроются задачи текущего пользователя. Для редактирования задач другого пользователя используйте команду:
Как узнать список заданий Crontab
Для просмотра записей crontab текущего пользователя используйте команду:
Чтобы посмотреть список заданий другого пользователя, используйте -u:
Примеры
1. Ежедневно в 2 часа ночи.
Это будет полезно для ежедневного резервного копирования.
2. Дважды в день
Команда ниже будет выполняться в 5 утра и 5 вечера ежедневно.
3. Каждую минуту
4. Каждое воскресенье в 17:00
Пригодится для планирования еженедельных задач.
5. Каждые 10 минут
Если вы хотите запустить скрипт с интервалом в 10 минут, вы можете настроить его, как показано ниже. Может быть полезно для мониторинга.
6. Определенные месяцы
Иногда может понадобиться запланировать задачи только на некоторые месяцы. Ниже приведен пример скрипта, который будет запущен в январе, мае и августе.
7. Определенные дни
Если вам необходимо составить расписание выполнения задачи только на некоторые дни. Приведенный ниже пример будет выполняться каждое воскресенье и пятницу в 17:00.
8. Первое воскресенье каждого месяца.
Запланировать выполнение сценария только в первое воскресенье невозможно по параметру времени, но мы можем использовать условие в полях команд, чтобы сделать это.
9. Каждые четыре часа.
Если вы хотите запустить скрипт с интервалом в 4 часа:
10. Дважды в каждое воскресенье и понедельник.
Чтобы запланировать выполнение задачи дважды только в воскресенье и понедельник:
11. Несколько задач
Можно запланировать несколько задач в одной записи с помощью точки с запятой:
12. Ежегодно (@yearly)
@yearly равно «0 0 1 1 *». Задание будет выполняться в первую минуту каждого года. Можно отправить новогодние поздравления 🙂
13. Ежемесячно (@monthly)
@monthly равно «0 0 1 * *». Задание будет выполняться в первую минуту месяца.
14. Еженедельно (@weekly)
@weekly равно «0 0 1 * mon». Задание будет выполняться в первую минуту недели.
15. Ежедневно (@daily)
@daily равно «0 0 * * *». Задание будет выполняться в первую минуту каждого дня.
16. Ежечасно (@hourly).
@hourly равно «0 * * * *». Задание будет выполняться в первую минуту каждого часа.
17. Выполнение задач при перезагрузке системы (@reboot).
@reboot полезен для тех задач, которые вы хотите запустить при перезагрузке системы.
18. Отправка результатов заданий на электронную почту
Если вы хотите отправить вывод на почту, то это можно сделать, установив переменную MAIL, как показано ниже.
Источник
Настройка планировщика задач Cron в CentOS Linux
Cron — это планировщик задач, работающий в Unix-подобных операционных системах, включая все дистрибутивы Linux. Демон cron работает на сервере в фоновом режиме и запускает по расписанию запланированные задачи. В этой статье мы рассмотрим установку cron на сервер с Linux CentOS 8, познакомимся с синтаксисом cron, научимся добавлять в него различные задачи, управлять расписанием запуска.
Установка cron в Linux
По умолчанию cron доступен при установке CentOS 8. Если же у вас по каким-то причинам он отсутствует, вы можете установить его из базового репозитория с помощью yum / dnf:
# dnf update -y — обновить все ПО на сервере
# dnf install crontabs -y — установите cron
В моем случае cron уже был установлен:
После установки, демон crond нужно добавить в автозагрузку и запустить:
# systemctl enable crond.service
# systemctl start crond.service
Crontab: добавление задания в планировщик cron
Для добавления задач в cron можно использовать команду:
Данная команда откроет файл для задач для вашего пользователя в текстовом редакторе по-умолчанию (у меня это vi, но можно изменить на удобный для вас, например nano). Настройка заданий таким способом исключает, что вы допустите ошибку в синтаксисе. Редактор crontab просто не даст сохранить файл с ошибками.
Также можно отредактировать файл заданий cron вручную через mc:
# mcedit /var/spool/cron/root – имя файла может отличаться, в зависимости от того, под каким пользователем вы работаете.
Чтобы добавить простое задание по запуск bash скрипта в cron, выполните:
Теперь добавьте расписание задания и путь к файлу скрипта:
Сохраните файл (редактирование файла по аналогии с редактором vim: сохранить Ctrl+O и выйти Ctrl+x).
Если все сделали верно, ваше задание будет добавлено. Чтобы вывести список заданий cron, выполните:
Данный скрипт будет запускаться через cron ежеминутно.
Каждая запись расписания crontab состоит из 5 полей:
Можно использовать следующие допустимые значения для каждого из полей:
Поле | Диапазон значений |
минуты | 0-59 |
часы | 0-23 |
день месяца | 1-31 |
месяц | 1-12 или jan feb mar apr may jun jul aug sep oct nov dec |
день недели | 0-6 (где 0 это воскресение) или sun mon tue wed thu fri sat |
Знак * означает все допустимые значения. Пример задания:
Указанный в задании скрипт, будет запускаться каждый понедельник в 00 часов 15 минут. Для упрощения синтаксиса cron-файла используют специальные символы:
Запятая (,) : запятой разбиваются значения расписания для выполнения одинаковой задачи, но в разное время. Например, если вам нужно выполнять задачу в 15 и 30 минут, вы можете задать расписание так:
Или исползовать более короткий синтаксис с запятой:
Слеш (/) : использовать косую черту можно для выражения какого-либо шага. Например, вам нужно запускать какую-то задачу каждые 2 часа. В обычном написании файл cron будет громоздким, используя / вы заметно сократите содержимое cron файл:
* */2 * * *
Дефис (-) : дефис указывает диапазон значений в поле. Если вы хотите запускать задание первые 10 минут или последние 10 минут, укажите диапазон через дефис:
Еще несколько примеров расписаний для cron:
- запуск по будням в 12:00 и 18:00: 0 12,18 * * 1-5
- каждые 30 минут: */30 * * * *
- каждую субботу: 0 0 * * 6
- каждый вторник и четверг в 2:00 ночи: 0 2 * * 2,4
Еще в cron можно использовать специальные переменные.
Переменная | Описание | Эквивалент |
@reboot | Запускается один раз при загрузке | |
@yearly | один раз в год | 0 0 1 1 * |
@monthly | один раз в месяц | 0 0 1 * * |
@weekly | один раз в неделю | 0 0 * * 0 |
@daily | один раз в день | 0 0 * * * |
@hourly | ежечасно | 0 * * * * |
@midnight | В полночь |
Т.е. для запуска задания раз в день можно использовать формат:
@daily echo «Проверка cron»
Можно отредактировать cron файл другого пользователя:
# crontab -u username
Отправка уведомлений cron на e-mail
Если вы хотите получать информацию о выполнении ваших задач cron по почте, нужно выполнить настройку cron-файла с задачами.
# dnf install sendmail -y
# service sendmail start
sendmail – бесплатный агент для передачи почты, который доступен практически для любой операционной системе.
Настроем параметры отправки e-mail в cron-файле. Добавьте в файл следующие строки:
MAILTO — укажите свой почтовый ящик
SHELL — оболочка пользователя
HOME — путь к файлу cron
После каждого запуска задачи на указанный email отправляется уведомление:
Информацию о запуске задания cron можно сохранять в лог-файл. Для этого, в конце задания нужно добавить >> и указать путь до лог-файла:
* * * * * echo «Проверка cron» >> /var/log/admin/journal.log
Если в вашем cron-файле добавлено много заданий и результат выполнения каких-то из них, не нужно отправлять на почту, данные задания вы можете запускать в «бесшумном» режиме:
* * * * * echo «Проверка cron» >> /dev/null 2>&1
Таким образом вы можете отделить некоторые задания, чтобы не отправлять уведомления о всех задания себе на почтовый ящик.
Файлы конфигурации и логи планировщика cron
Основной файл конфигурации демона cron — /etc/crontab. Помимо cron-файла, задачи можно запускать из следующих директорий:
- /etc/cron.daily – запуск скриптов один раз в день
- /etc/cron.hourly – запуск скриптов ежечасно
- /etc/cron.monthly – запуск скриптов раз в месяц
- /etc/cron.weekly – запуск скриптов раз в неделю
Просто разместите нужны скрипты в нужную директорию, и они будут выполняться согласно расписания.
Можно ограничить доступ к планировщику с помощью файлов /etc/cron.allow и /etc/cron.deny. Достаточно создать эти файлы и добавить в него пользователей, которым, соотвественно, разрешено и запрещено запускать задания cron.
В файл /etc/crontab тоже можно помещать задания. Обычно данный файл используется root пользователем или для настройки системных задач. Личные файлы пользователей для cron заданий, хранятся в директории /var/spool/cron/ или /var/cron/tabs/.
Чтобы отследить выполнение задач или отследить ошибки, можно обратиться к лог-файлу /var/log/cron. В данном файле фиксируется запуск всех задач и ошибки в работе демона, если они есть:
Источник