Что это такое Cron? Простая настройка cron на linux

Для Symbian 06.08.2019
Для Symbian

Системным администраторам, да и обычным пользователям часто приходится автоматизировать различные задачи по обслуживанию и работе с Linux с помощью скриптов. Это очень удобно, вы просто запускаете скрипт, и он делает все что необходимо без вашего вмешательства. Следующий шаг в этом пути - настроить автоматически запуск нужного скрипта в нужное время.

Именно для этих задач в Linux используется системный сервис cron. Это планировщик, который позволяет выполнять нужные вам скрипты раз в час, раз в день, неделю или месяц, а также в любое заданное вами время или через любой интервал. Программа часто используется даже другими службами операционной системы. В этой статье мы рассмотрим как выполняется настройка Cron и разберем основные часто используемые примеры.

Фактически, Cron - это сервис, как и большинство других сервисов Linux, он запускается при старте системы и работает в фоновом режиме. Его основная задача выполнять нужные процессы в нужное время. Существует несколько конфигурационных файлов, из которых он берет информацию о том что и когда нужно выполнять. Сервис открывает файл /etc/crontab, в котором указаны все нужные данные. Часто, в современных дистрибутивах там прописан запуск утилиты run-parts, которая запускает нужные скрипты из следующих папок:

  • /etc/cron.minutely - каждую минуту;
  • /etc/cron.hourly - каждый час;
  • /etc/cron.daily - каждый день;
  • /etc/cron.weekly - каждую неделю;
  • /etc/cron.monthly - каждый месяц.

В этих папках должны находиться скрипты, которые нужно выполнять с указанным интервалом. Скрипты должны иметь права на выполнение и их имя не должно содержать точки. Это очень сильно облегчает работу с планировщиком для новых пользователей. Также в файле crontab прописан запуск команды anacron, которая работает так же как и cron, только предназначена для задач, которые нужно выполнять раз в длительный период, например, раз в день, неделю, месяц, год.

Она позволяет выполнять их даже если компьютер работает не всегда и время от времени выключается. Дата выполнения задания последний раз записывается в файл /var/spool/anacron, а затем, при следующем запуске anacron проверяет был ли запущен нужный процесс в нужное время, и если нет, то запускает его. Сам же сервис cron больше рассчитан на выполнение задач в течение дня или с точно расписанным временем и датой.

Настройка Cron

Для настройки времени, даты и интервала когда нужно выполнять задание используется специальный синтаксис файла cron и специальная команда. Конечно, вы всегда можете отредактировать файл /etc/crontab, но этого делать не рекомендуется. Вместо этого, есть команда crontab:

Ее всегда желательно выполнять с опцией -e, тогда для редактирования правил будет использован ваш текстовый редактор по умолчанию. Команда открывает вам временный файл, в котором уже представлены все текущие правила cron и вы можете добавить новые. После завершения работы команды cron файл будет обработан и все правила будут добавлены в /var/spool/cron/crontabs/имя_пользователя причем добавленные процессы будут запускаться именно от того пользователя, от которого вы их добавляли.

Поэтому тут нужно быть аккуратным, и если вам нужно выполнять скрипты от рута, то и crontab нужно выполнить от рута, а не от пользователя. Это часто становиться причиной проблем.

Синтаксис crontab

Как я уже говорил, время задается особым синтаксисом, давайте рассмотрим синтаксис настройки одной задачи cron:

минута час день месяц день_недели /путь/к/исполняемому/файлу

Нужно сказать, что обязательно нужно писать полный путь к команде, потому что для команд, запускаемых от имени cron переменная среды PATH будет отличаться, и сервис просто не сможет найти вашу команду. Это вторая самая распространенная причина проблем с Cron. Дата и время указываются с помощью цифр или символа "*". Этот символ означает, что нужно выполнять каждый раз, если в первом поле - то каждую минуту и так далее. Ну а теперь перейдем к примерам.

Примеры настройки cron

Сначала можно посмотреть задачи cron для суперпользователя, для этого можно воспользоваться опцией -l:

Вы можете удалить все существующие задачи командой -r:

Давайте предположим, что нам нужно запускать от имени суперпользователя наш скрипт по адресу /usr/local/bin/serve. Какой-нибудь обслуживающий скрипт. Самый простой пример - запускать его каждую минуту:

* * * * * /usr/local/bin/serve

0 * * * * /usr/local/bin/serve

Запускаем в нулевую минуту нулевого часа, каждый день, это в 12 ночи:

0 0 * * * /usr/local/bin/serve

0 0 1 * * /usr/local/bin/serve

Можно в любой день, например, 15 числа:

0 0 15 * * /usr/local/bin/serve

В первый день недели первого месяца года, 0 часов 0 минут:

0 0 * 1 0 /usr/local/bin/serve

Или в нулевой день недели каждого месяца:

0 0 * * 0 /usr/local/bin/serve

Вы можете выбрать любую минуту, час и день недели, например, 15.30 во вторник:

30 15 * * 2 /usr/local/bin/serve

Понедельник считается первым днем, воскресенье - это седьмой или нулевой день. Еще можно писать сокращенное название дня недели, например sun - воскресенье:

30 15 * * sun /usr/local/bin/serve

Для того чтобы указать определенный интервал нужно использовать символ "-", например, каждый час, с семи утра до семи вечера:

0 7-19 * * * /usr/local/bin/serve

Если нужно запустить команду несколько раз, можно использовать разделитель ",". Например, запустим скрипт в 5 и 35 минут пятого (16:05 и 16:35), каждый день:

5,35 16 * * * /usr/local/bin/serve

Вы можете захотеть не указывать отдельно время, а просто указать интервал, с которым нужно запускать скрипт, например, раз в 10 минут. Для этого используется разделитель косая черта - "/":

*/10 * * * * /usr/local/bin/serve

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

  • @reboot - при загрузке, только один раз;
  • @yearly, @annually - раз год;
  • @monthly - раз в месяц;
  • @weekly - раз в неделю;
  • @daily, @midnight - каждый день;
  • @hourly - каждый час.

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

@hourly /usr/local/bin/serve

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

sudo vi /etc/corn.daily/basckup

Скрипт должен выглядеть подобным образом. Теперь вы знаете как настроить cron, осталось проверить как все работает.

Отладка работы

После того как вы настроили правила, еще хотелось бы проверить работают ли они. Для этого ждем того времени, когда скрипт уже должен быть выполнен и смотрим лог cron. Иногда он находится в /var/log/cron, а иногда пишется в syslog. Например, у меня в crontab есть такая строка:

Она должна выполняться в 19.40 каждый день, теперь смотрим лог:

grep CRON /var/log/syslog

И видим что в нашем логе она действительно есть и выполняется целиком успешно. Если бы были какие-либо ошибки, то тут же было бы выведено сообщение.

Если нужно проверить скрипт, который находится в одной из специализированных папок, то тут еще проще, просто запустите run-paths, передав ей в параметр нужную папку или даже сам скрипт:

sudo run-paths /etc/cron.daily/

Выводы

В этой статье мы рассмотрели как выполняется настройка cron для удобного планирования автоматических задач. Надеюсь, эта информация была полезной для вас.

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

Что представляет собой Cron?

Название программы образовано от греческого «хронос», означающего время. Что, собственно, логично. Задача демона — в определённые моменты выполнять записанные в него команды. Сам процесс реализации основан на проверке таблиц крона и сравнении их с и временем.

Файл crontab

Самым главным элементом настройки Cron является конфигурационный файл crontab. Он содержит в себе команды исполнения и пути к скриптам. Все они запускаются от имени суперпользователя. Так как они расположены в директории /etc/cron.d, настройка этих файлов должна производиться именно там.

Для каждого отдельного пользователя системы используется свой файл crontab.

Разные дистрибутивы Linux используют свои каталоги для хранения пользовательских настроек. Для RedHat это — var/ spool/cron. В Debian и Ubuntu это будет var/spool/cron/crontabs. И var/spool/cron/tabs в SUSE.

Список команд для управления crontab

Cron имеет набор специальных директив, с помощью которых можно управлять планировщиком. Применять их нужно в связке с crontab. Вот небольшой список:

  • -u имя_пользователя. Устанавливает пользователя, с задачами и настройками которого будут производиться дальнейшие действия. Если опустить данный ключ, то будет задан пользователь по умолчанию.
  • -l. Выведет текущий список задач.
  • -e. Производит запуск редактора для планировщика задач.
  • -r. Удаляет все имеющиеся задачи из списка.

Формат задачи

Как было сказано выше, настройка Cron заключается в задании команд в специальном файле. Выглядит это как простая запись, состоящая из шести колонок:

  • в первой указывается количество минут. Доступный интервал — от 0 до 59. Можно использовать несколько значений, диапазон и специальные символы;
  • вторая колонка — часы. Могут использоваться значения от 0 до 23;
  • далее — день. Здесь можно указать число от 1 до 31;
  • четвёртый — месяц. Минимальное значение 1, максимальное — 12;
  • пятая — неделя. 0 или 7 соответствует воскресенью;
  • последней идёт сама выполняемая команда.

Как было упомянуто, в файле можно указать специальные символы, «*» или «/». Например, такая запись — 23 */2 *** echo «Выполнить» означает, что каждый чётный час и 23 минуты будет отображаться надпись «Выполнить».

Особенности файла crontab

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

  • каждый файл обязательно должен завершаться пустой строкой, иначе последний пункт может быть проигнорирован, а иногда и целиком весь файл;
  • файлы, размещённые в каталогах, имеющих в имени точку, также будут проигнорированы планировщиком;
  • в файлах настройки можно использовать символы решётки «#». Они применяются для того, чтобы отметить строки с комментариями. Это очень удобно для описания запланированных задач и команд.

Дополнительные переменные

При настройке Cron можно применять в командах специальные значения и сокращения. Например, для указания дня недели можно использовать следующий список:

  • sun — воскресенье;
  • mon — понедельник;
  • tue — вторник;
  • wed — среда;
  • thu — четверг;
  • fri — пятница;
  • sat — суббота.

Для месяцев также имеются отдельные буквенные значения — jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec.

Также для настройки Cron имеются отдельные переменные, способные заменить целые строки команд:

  • @reboot. Команда будет стартовать каждый раз при запуске компьютера;
  • @yearly. Данная задача будет запускаться один раз в год. Эквивалентная ей запись в числовом виде может быть такой: 0 0 1 1 *. Ее синоним ещё можно записать как @annually;
  • @monthly. Как можно догадаться из названия, данная переменная производит запуск команды раз в месяц. Ее числовой аналог — 0 0 1 * *;
  • @weekly. Данная переменная будет запускаться каждую неделю;
  • @dayly. Раз в день;
  • @midnight. Запуск будет произведён в полночь;
  • @hourly. Каждый час.

Настройка Cron в Centos 7

Сам процесс установки и конфигурирования мало чем отличается от других схожих Linux дистрибутивов. Перед настройкой Cron в Centos необходимо установить пакет cronie в систему. Сделать это можно с помощью команды yum install cronie. Для создания файла с инструкциями нужно выполнить в терминале crontab -e. Все системные настройки Cron будут сохраняться по адресу /var/spool/cron/имя пользователя.

Несколько полезных примеров для создания часто повторяющихся задач

Можно провести настройку Cron таким образом, чтобы охватить практически все потребности любого пользователя.

  • 00 09-17 * * 1 - 5 /путь/ к команде/ крона. Данная команда будет автоматически выполнять запланированное действие каждый рабочий день с 9 до 5 часов каждую первую минуту;
  • 00 9,17 * * * /путь/ к команде/ крона. В этом примере происходит исполнение команды два раза в день. Первый в 9, второй - в 5 часов. Знак «*» показывает, что команда будет выполняться каждый день, месяц и год;
  • Также не стоит забывать и про символьные переменные. Например, @monthly будет выполнять задачу каждый месяц в первую минуту первого часа первого дня. А @daily будет запускаться каждый день.

Cron - это планировщик заданий, который работает на Unix\Linux хостинге. Он позволяет автоматически выполнять определенные действия на сервере (запуск программ, скриптов и т.д.), с заданным временем или периодичностью.

Правильная настройка планировщика заданий Cron

Задания для Cron можно описать так - это несколько строк (одна строка - одно задание), в которых указывается периодичность запуска и команда (которая означает, что собственно нужно запустить):

30 3 * * 2 /yourdirectory/myscript.pl

Схематично:

Минуты Часы ДеньМесяца Месяц ДеньНедели Команда

Минуты - задается числом от 0 до 59

Часы - задается числом от 0 до 23

ДеньМесяца - задается числом от 1 до 31

Месяц - задается числом от 1 до 12

ДеньНедели - 1 - Понедельник, 2 - Вторник, 3 - Среда, 4 - Четверг, 5 - пятница, 6 - Суббота, 7 - Воскресенье

Таким образом в нашем примере (30 3 * * 2 /yourdirectory/myscript.pl) задние означает, что нужно каждый вторник, в 3 часа 30 минут ночи запускать файл /yourdirectory/myscript.pl

Также в каждом из полей мы можем использовать:

Написание через запятую : 2,5,16 - если написать такое в поле Часы, то задание будет запускаться в 2 часа ночи, в 5 часов утра и в 16 часов.

Интервал : 5-9 - если написать в это в поле Минуты, то задание будет запускаться каждую минуту в период с 5 по 9 мин.

Дополнительная периодичность : /4 - если написать такое в поле часы, то это будет означать что запуск будет происходить каждые 4 часа.

Важно! Звездочка (*) - означает все возможные значения! Таким образом, неопытный вебмастер который решит, что для запуска задания 1 числа каждого месяца достаточно написать * * 1 * * /yourdirectory/myscript.pl натыкается на то, что задание будет запускаться каждую минуту, в каждом часу.

Как и куда вводить Cron-задания?

Первый способ работы с Cron - это панель управления хостингом. Но в разных панелях настройка и управление осуществляются по разному:

cPanel: Панель управления -> Задания Cron

ISP Manager: Панель управления -> Планировщик (Cron)

Parallels Plesk: Панель управления -> Запланированные задачи

Если у вашего хостинг-провайдера нет возможности работать с заданиями через панель управления, то вся работа с Cron обычно производится через SSH-протокол. Здесь все просто - подключаетесь к серверу по SSH и вводите команды. Для подключения к серверу используют бесплатную программу PuTTY (как настроить), а команды вводят в командной строке.

Чтобы начать работу вводим команду

После этого вас скорее всего перебросит в текстовый редактор vi (у разных провайдеров могут быть разные редакторы). vi - это достаточно сложный редактор, поэтому рекомендуем вам попробовать ввести строчку

Если запустится более легкий редактор, то все отлично, если же ваш хостинг-провайдер его не поддерживает, то Google поможет разобраться с vi. Мы лишь кратко обозначим основные моменты:

Ввод текста - жмем клавишу i и редактор перейдет в режим ввода текста;

выйти из режима ввода текста - Esc

Удалить символ - x (если вы находитесь в режиме ввода теста, то чтобы удалить символ сначала нажмите Esc, а потом x);

Важно! Вводя задания для Cron после каждой строчки нужно обязательно нажимать Enter, даже если эта строчка единственная.

Чтобы посмотреть уже существующие задания для Cron вводим crontab -l

Задания для Cron с полезными примерами

Правила составления Cron-заданий смотрим . Запускать задание каждые 2 часа в 0 минут (каждый день, каждого месяца)

0 */2 * * * /yourdirectory/myscript.pl

Запускать задание каждый раз после перезагрузки сервера

@reboot /yourdirectory/myscript.pl

Запускать задание по средам в 3 часа 20 минут ночи (каждый день, каждого месяца)

20 3 * * 3 /yourdirectory/myscript.pl
1 0 14 3 * /yourdirectory/myscript.pl

Запускать задание ежемесячно 1 числа в 3 часа 15 минут ночи (в каждом месяце)

15 3 1 * * /yourdirectory/myscript.pl

Запуск PHP-файлов по расписанию с помощью Cron

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

30 3 * * 2 root wget -O - -q -t 1 http://mysite.com/file.php

"-O -" означает, что Cron не будет создавать лишние файлы, а будет работать через консоль. Это позволяет избежать захламления сервера.

"-q" отключает вывод операции на экран

"-t 1" разрешается только одна попытка соединения.

http://mysite.com/file.php - путь к вашему PHP-фалу (не обязательно указывать абсолютный путь).

Важно! Если вы будете передавать параметры с помощью этого PHP-файла, то бывают случаи когда WGET не совсем корректно их обрабатывает. В таком случае рекомендуем взять адрес PHP-файла в одинарные кавычки:

30 3 * * 2 root wget -O - -q -t 1 "http://mysite.com/file.php"

Также, существует еще один способ запуска:

30 3 * * 2 /usr/bin/wget -O - -q -t 1 http://mysite.com/file.php

Но в этом случае вам нужно знать путь к папке wget на своем сервере (чаще всего /usr/bin/wget или /usr/local/bin/wget).

Получение отчета о работе Cron на почту

Cron можно настроить так, чтобы на электронную почту приходили сообщения с результатами запущенных заданий. Эта функция также может быть полезна, для уведомления на случай ошибки. Для получения отчета на e-mail нужно редактируя crontab (перед заданиями) написать такую строку:

где [email protected] - это e-mail на который будут приходить письма. Также можно добавить несколько адресов, через запятую.

Есть еще один момент, вам на почту будет приходить еще и результат работы скрипта. например, если скрипт пишет на экране какую-то надпись, то эта же надпись придет на вашу почту вместе с отчетом. Если это вас раздражает, то добавьте в конце задания строку > /dev/null 2>&1

30 3 * * 2 /usr/bin/wget -O - -q -t 1 http://mysite.com/file.php > /dev/null 2>&1

В ОС Unix существует возможность запускать программы пользователя в указанное им время. Для этого используется программа cron, которая получает инструкции от пользователей и, следуя им, производит выполнение любых задач по полученным сценариям. Наши клиенты могут пользоваться данной возможностью для выполнения периодических задач.

Как настраивать cron в Личном кабинете (для unix-тарифов)

Поскольку не все PHP-программы могут работать через CLI SAPI без предварительной модификации, можно запускать их через wget . Например:

/usr/local/bin/wget -O /dev/null -q http://mysite.tld/cron.php?action=123

Если в скрипте используются функции require , include , причём в них указаны относительные пути, то в начале выполняемого скрипта используйте вызов функции chdir() , которая задаст текущую рабочую директорию.

Как получать сообщения об ошибках от программ, запускаемых cron

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

MAILTO=адрес@домен.ru

Конечно, адрес@домен.ru нужно заменить на реально существующий адрес электронной почты куда надо будет доставлять уведомления. Если нужно получать сообщения об ошибках на несколько адресов, укажите все эти адреса через запятую.

Обратите внимание на то, что cron будет присылать по почте то, что выводят запускаемые скрипты. Например, если вы напишете скрипт, который будет печатать строчку «Hello, world» и поставите его на выполнение через cron, вы будете получать по почте письмо со строкой «Hello, world» каждый раз, когда cron будет запускать такой скрипт.

Чтобы избежать этого, например, когда текст, выводимый скриптом, вам не нужен, надо добавить в конец строки-сценария для cron символы

> /dev/null 2>&1

Полностью строка для cron будет выглядеть так:

0 1 * * * /usr/local/bin/php -q $HOME/script.php > /dev/null 2>&1

Рекомендуем проверять корректность синтаксиса скриптов, которые вы устанавливаете на выполнение через cron. Скрипты могут содержать ошибку, могут неодинаково работать при запуске через веб-сервер и через cron, и так далее. Для того, чтобы убедиться, что скрипт будет правильно работать через cron, предварительно проверьте его такой командой в unix shell:

/usr/local/bin/php -l script.php

Если ошибок в скрипте нет, вы увидите сообщение «No syntax errors detected in script.php».

Ограничения

Для программ, которые запускаются через cron, действуют такие же ограничения по потребляемым ресурсам, как для процессов, запускаемых пользователем в unix shell. Речь идет об ограничениях на время выполнения программы, количеству доступной памяти, ограничениях на размер файлов, и так далее.



Рекомендуем почитать

Наверх