Настройка cron в linux

Для выполнения конкретных задач по расписанию, или периодически, через равный промежуток времени (регулярных действий) в линуксе  (да и вообще в UNIX-подобных ОС), существует утилита cron. Это программа-демон (служба, по аналогии с Windows), которая постоянно размещена и работает в оперативной памяти компьютера, сканируя раз в минуту список установленных задач на наличие актуальной для выполнения в текущий момент времени. Сами инструкции по запуску задач находятся в специально предназначенных crontab-файлах, которые, в свою очередь, находятся в строго отведённых каталогах системы.

Историческая справка

Утилита была разработана ещё в начале 70-х годов прошлого столетия, когда Кен Томпсон и Деннис Ритчи создали ОС UNIX. Они работали над проектом по созданию многозадачной и многопользовательской системы Multics, в котором принимали участие компании AT&T и Bell Labs. В то время подобная система была настолько высокотехнологичным и прорывным продуктом, что позже Bell Labs отказалась от активного участия в проекте из-за крайне низкой востребованности подобного рода систем для широкого потребления.
Однако, используя наработки из проекта Multics, Томпсон и Ритчи на этой основе и на волне энтузиазма создали ОС UNIX. Такая мощная и прорывная платформа для полноценного раскрытия своего функционала нуждалась в обеспечении её функционалом в виде специализированного ПО и утилит, одной из которых и по сей день является cron. Разработчиком утилиты является Кен Томпсон.

Функционал и основные компоненты примеры cron

Описания регулярных действий, запускаемых утилитой– это так называемая crontab-таблица, которая имеет строго определенный формат. Она состоит из 6 колонок, разделённых табуляторами или пробелами, первые 5 из которых определяют время запуска действия. Последняя колонка интерпретируется как команда запуска, т. е. само действие.

0 5 * * 1 tar -zcf var/backups/home.tgz /home/

Приведённое описание действия означает запуск резервного копирования (путём архивирования и помещения созданного архива в var/backups/) всех каталога /home каждую неделю (по понедельникам) в 5 утра. Как видно, сначала задаётся колонка минут, затем часов, дней, месяцев и дней недели. Далее следует команда запуска, в данном случае для создания архива. В колонках, определяющих время могут использоваться числа, группы чисел, разделяемых запятыми, диапазоны чисел, разделяемых дефисом, а также символы «*» и «/». Каждому действию соответствует строка описания в crontab-файле. В приведённом примере цифра «1» означает порядковый номер дня недели — понедельник, соответственно «2» — вторник, «3» — среда и т. д., причём воскресенье это «0» или «7». Символ «*» означает любое значение с учётом валидности для соответствующего параметра. Для задания шага значений используется символ «/», например:

23 */2 * * * echo "Выполняется в 0:23, 2:23, 4:23 и т. д."

Пример настройки планировщика на выполнение задачи каждые 5 минут выглядит так

*/5 * * * * echo "Выполняется каждые 5 минут"

Каждую минуту

*/1 * * * * echo "Выполняется каждую минуту"

Каждый час

* */1 * * * echo "Выполняется каждый час"

каждое первое число февраль, июль и ноябрь в 2.30

10 00 01 02,07,11 * echo "каждое первое число февраль, июль и ноябрь в 0.10"

Каждые полчаса:

00,30 * * * * echo "каждые полчаса"

По выходным

* * * * 6,7 echo "суббота и воскресенье"

трижды в день:

00 10,15,20 * * * echo "будет выполняться каждый день в 10.00 и 15.00, 20.00"

один раз в день с 00 до 09 часов по буднем.

00 00-09 * * 1-5 echo "будет выполняться с 00 до 09 часов по буднем"

Для добавления скрипта в крон нужно прописать полный путь к скрипту. Пример

00 01 * * * /etc/scripts/script.sh

В данном примере скрипт /etc/scripts/script.sh будет запускаться каждый день в час ночи. Существуют два типа crontab-файлов: системные и пользовательские. В отличие от пользовательских, в системных после колонок задания времени используется еще колонка для указания пользователя, от которого выполняется действие:

17 * * * * root cd / && run-parts —report /etc/cron.hourly

Кроме того, местоположение системных и пользовательских crontab-файлов различается: файлы, используемые для действий, управляющих системой находятся в /etc/cron.d/, а файлы, создаваемые для отдельных пользователей хранятся по адресу /var/spool/cron/crontabs/.
Для корректной работы утилиты необходимо в файлах crontab указывать оболочку командного интерпретатора, а также добавлять домашний каталог пользователя в PATH:

SHELL=/bin/sh
PATH=/bin:/usr/bin:/home/paul/bin

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

MAILTO=user@example.org

Если в описании действия команда отправляет текстовое содержимое в стандартный вывод, то программа, при наличии электронного адреса, автоматически перехватит это сообщение и отправит по e-mail.

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

Файлы crontab нельзя редактировать вручную, т. к. это может вызвать сбой в цикле обработки этих файлов, когда демон сканирует их для анализа описаний действий. Для редактирования пользовательского файла crontab существует команда:

crontab -e

При первом своём запуске эта команда сначала предложит выбрать один из имеющихся в системе текстовых редакторов, после чего откроет файл для редактирования.
Для просмотра используемого в данный момент crontab-файла используется команда:

crontab -l

Для удаления:

crontab –r

Будьте аккуратны с этой командой, она удаляет всю таблицу задач без предупреждения!

Важно заметить, что команда «crontab -e» также используется для создания пользовательского файла. Сначала файл будет создан в каталоге /tmp/ и лишь позже cron самостоятельно скопирует его в каталог пользовательских crontab-файлов, задав ему имя соответствующего пользователя, т. е. того, кем он был изначально создан.

Не стоит пугаться директории /tmp/ — файлы crontab в ней не потеряются.

Некоторые особенности cron

Утилита обладает рядом особенностей, которые необходимо учитывать при работе с ней и составлении описаний регулярных действий:

  1. Минимальное время составляет одну минуту.
  2. Файл crontab должен всегда заканчиваться пустой строкой
  3. Условия времени запуска «день недели» и «день месяца» обрабатываются через логическую операцию «ИЛИ», все остальные условия — через логическое «И».
  4. Выводы запускаемых команд выводятся в виде сообщений пользователю, но если в файле crontab была определена директива MAILTO – сообщение будет отправлено по указанному в этой директиве e-mail.

Узнать, запущена ли в данный момент утилита крон, позволяет команда:

service cron status

или:

systemctl status cron

Для запуска и остановки можно также использовать:

service cron start
service cron stop

и

systemctl start cron
systemctl stop cron

Логи Cron

Логи по работе запуска программы в каждой системе хранятся по разному. Например в Centos это /var/log/crond, в Ubuntu /var/log/syslog. Так же, если не указанно MAILTO, вывод команд работы скриптов которые запускает крон, можно посмотреть в каталоге /var/spool/mail. В файле пользователя из под которого запускается программа.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

ИТ Проффи

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: