Настройки Cron: особенности, пошаговая инструкция и отзывы. Простая настройка cron на linux Crontab каждый день

cron – программа-демон, предназначенная для выполнения заданий в определенное время, или через определенные промежутки времени. Для редактирования заданий используется утилита crontab .

Листинг

Нельзя изменять файл расписания, просто открыв его в текстовом редакторе. Для его редактирования необходимо использовать команду crontab -e .

Простой пример файла расписания. Создание снимка экрана каждый час:

SHELL =/ bin/ bash MAILTO =username 0 * * * * scrot

Основные настройки

Выбор среды для исполняемых задач:

SHELL =/ bin/ bash

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

MAILTO =username

Вместо имени, также можно использовать электронный адрес:

MAILTO =example@ example.org

Не обязательные настройки

Задаем каталог пользователя:

HOME =

Задаем каталоги исполняемых фалов:

PATH =/ sbin:/ bin:/ usr/ sbin:/ usr/ bin

Прописываем дисплей, если запускаемый по крону скрипт должен использовать графику:

DISPLAY =:0.0

Выбор времени выполнения задания

Время запуска представляется в таком виде:

Минута час день_месяца месяц день_недели команда

Символ "*" подразумевает - любое значение.

Минимальное время 1-а минута. Это связано с тем что cron каждую минуту просматривает список заданий, и ищет которые нужно выполнить.

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

Управление при помощи crontab

Добавление файла расписания:

Crontab имя_файла_расписания

Вывести содержимое текущего файла расписания:

Crontab -l

Удаление текущего файла расписания:

Crontab -r

Редактирование текущего файла расписания (при первом запуске будет выведен список поддерживаемых текстовых редакторов):

Crontab -e

Этот ключ позволяет выполнять вышеописанные действия для конкретного пользователя:

Crontab -u username

Учтите, что -u можно воспользоваться только запуская crontab от лица суперпользователя .

Примеры

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

* * * * *

Каждый час, с использованием переменных cron:

@ hourly ~/ script.sh

Каждый день в 03:15 запускать скрипт:

15 3 * * * ~/ script.sh

Каждый понедельник:

0 0 * * 1

Каждый четный час:

* */ 2 * * *

Тоже что и выше, но расписанное полностью:

* 0 ,2 ,4 ,6 ,8 ,10 ,12 ,14 ,16 ,18 ,20 ,22 * * *

Каждые 10 минут:

*/ 10 * * * *

Новый год :

59 23 31 dec *

Каждый будний день в 22:00:

0 22 * * 1 -5

Запуск программы с графической оболочкой (GUI); каждую минуту будет отображаться сообщение с текстом «It work!»:

0 -59 * * * * DISPLAY =:0 gdialog --msgbox "It work\!" 25 20 > / dev/ null

* где DISPLAY=:0 - номер монитора

GUI версии

GTK+

Есть очень полезная программа: Scheduled tasks (gnome-schedule). Она представляет собой графический интерфейс для cron, и будет полезна новичкам, так как понятным языком описывает время выполнения задачи. К примеру:

15 * * * *

каждый час в 15 минут;

* 0 * * *

каждую минуту, между 00:00 и 00:59.

Очень часто в 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 будет запускаться каждый день.

Полезным механизмом, обеспечивающим контроль за выполнением процессов в linux является планировщик заданий или cron , файл crontab в директории etc с помощью этого файла добавляются скрипты, задачи, которые мы можем написать для работающей системы, например для контроля работы linux системы по e-mail

Cron – служба-демон используется в linux/unix системах в качестве планировщика заданий. Демон позволяет периодически запускать скрипты на выполнение.

Создаваемые файлы помещаются или в директорию:
/usr/spool/cron/crontabs или /var/spool/cron/tabs
Редактировать их нужно только через выполнение crontab –e
В зависимости от периода выполнения файлы могут быть помещены в директории:
/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly

Создание заданий cron
Создание задания в crontab выглядит как заполнение шести обязательных полей, их значение следующее:
1. Минуты – цифра от 0-59
2. Часы – цифра от 0-23
3. День месяца – цифра от 1-31
4. Номер месяца в году – цифра от 1-12
5. День недели – цифра от 0-7
0-воскресенье, 1-понедельник, 2-вторник, 3-среда, 4-четверг, 5-пятница, 6-суббота
Для каждого из вышеперечисленного параметра может быть заданы значения:
а) Через запятую – 3,7,9 (в поле день месяца 3,7,9 соответственно)
б) Через дефис – 3-9 (в поле час будет означать выполнение в 3,4,5,6,7,8,9)
в) * - будет выполняться во все возможные значения
г) / - задание дополнительных периодов задания - */8 в поле минуты, будет выполняться каждую восьмую минуту

Как запустить задачу cron при загрузке системы. Для запуска скрипта при загрузке системы Linux используется ключевое слово reboot. Например:

Кроме того можно использовать еще следующие ключевые слова:
@yearly – то же что и 0 0 1 1 * (раз в год)
@daily – то же что и 0 0 * * * (раз в день)
@hourly – то же что и 0 * * * * (раз в час)

Команды для управления crontab
- просмотреть задания для текущей учетной записи
crontab –l
- просмотреть задания нужной учетной записи
crontab –u username –l
- Редактирование cron заданий
crontab –e
- Редактирование cron заданий заданного пользователя
crontab –u username –e

Примеры заданий cron:
Выполнить задание в 7 утра каждый день
0 7 * * * root /home/scripts/mount.sh
Выполнить задание в 17:30 каждый день
30 17 * * * root /home/scripts/mount.sh
Выполнить задание каждый месяц первого числа в 0 часов 0 минут
0 0 1 * * root /home/scripts/mount.sh
Выполнять задание через каждые 4 часа
* * /4 * * * root /home/scripts/mount.sh
Выполнить задание при загрузке Linux
@reboot root /home/scripts/mount.sh

Дополнительная настройка cron
Для того, чтобы получать отчет по заданиям cron можно определить переменную MAIL в начале cron сценария
MAIL=mail.mail.local
По умолчанию в письме будут присутствовать все сообщения выводимые сценарием, чтобы этого не происходило, нужно добавить в задании cron сценария > /dev/null 2>&1
Чтобы отключить получение сообщений от cron нужно оставить переменную MAIL не установленной
MAIL=” ”
Есть возможность определить путь до файла с скриптом используя переменную PATH, например
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/home/scripts, в crontab позволит писать в строке параметров задания
@reboot root mount.sh
Запуск сриптов через cron используя интерпретатор php
* 1 * * * /usr/local/bin/php – q mount.sh > /dev/null 2>&1
/usr/local/bin/wget –O /dev/null –q http://"site.com/cron.php?action=123"

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

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

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

30 3 * * 2 /yourdirectory/myscript.pl

На более понятном простому пользователю языке тут обозначены: Минуты/Часы/ДеньМесяца/ДеньНедели/Команда. Данный пример означает, что в 3:30 ночи, каждый вторник, Сron должен запускать файл с названием youdirectory/myscript.pl.

Если перечислить значения через запятую, например в пункте «День» написать 2,4,6, то файл будет запускаться в указанное время каждый вторник, четверг и субботу.

Если задать значения через дефис, то задача будет исполняться в указанном интервале времени. Например, если в пункте «Часы» задать 3-7, то файл будет запускаться каждый час с 3 до 7 утра.

Также можно задать периодичность, написав в графе времени, например, в «Часы» /12. Тогда задача будет исполняться каждые 12 часов.

Важно знать, что «*» означает не отсутствие значения, а все возможные значения. То есть, если задать * * * * 1 /yourdirectory/myscript.pl, желая, чтобы файл запускался каждый понедельник, то это окажется совершенно неверным и файл будет запускаться каждую минуту.

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

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

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

Иногда случается, что хостинг не предоставляет возможности работы с Cron через панель администрирования. В такой ситуации используют SSH-протокол. С помощью него подключаются серверу, используя программу PuTTY, и вводят задачи в командной строке.

Для начала работы следует ввести команду:

Crontab –e

Далее вы попадете в vi – текстовый редактор, однако, эти редакторы могут быть разными у разных хостингов. Если вы не знакомы с работой в vi, то вы можете ввести команду: EDITOR=ee crontab –e, которая перенаправит вас в более простой и понятный редактор.

В случае, когда хостинг не осуществляет поддержку открывшегося редактора, придется разобраться с работой vi:

  • для ввода текста необходимо перейти в одноименный режим, нажав кнопку «i»;
  • для выхода из режима воспользуйтесь кнопкой «Esc»;
  • для удаления символа в режиме ввода текста воспользуйтесь клавишами «Esc», а затем «x»;
  • сохранения и выхода из файла нажмите «:wq»;
  • в обязательном порядке нажимайте клавишу «Enter» в конце каждой строчки, это необходимо для работы Cron;
  • для просмотра уже имеющихся задач в Cron введите команду crontrab-l.

Примеры задач для Cron в linux

— Исполнять задание каждые 6 часов в 30 минут каждого дня каждого месяца:

30 */6 * * * /yourdirectory/myscript.pl

— Исполнять задание после каждой перезагрузки:

@reboot /yourdirectory/myscript.pl

— Исполнять задание 15 числа каждого месяца в 00 часов 00 минут:

0 0 15 * * /yourdirectory/myscript.pl

PHP-файлы

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

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

Разберем более подробно:

  • «-O-» — не дает Cron создавать дополнительные файлы, тем самым, избавляя сервер от лишнего хлама, так как работа происходит в консоли;
  • «q» — операции больше не выводятся на экран;
  • «t-1» — разрешение лишь одной попытки соединения.

Ограничения Cron

У самого Cron имеется всего одно ограничение – период исполнения задач. Если вы перегружаете сервер своего хостинга, он может поставить запрет на запуск Cron чаще, чем раз в несколько минут или час. Кроме этого Cron ограничен только ресурсами сервера, такими как: оперативная память, объемы данных, время выполнения команд и т.д.

Если сервер перезагрузится, то Cron сохранит все ваши задачи, перезагрузившись вместе с ним.

Отчет

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

MAILTO= [email protected]

После MAILTO= указывается необходимая почта. Указать их можно сразу несколько, перечислив через запятую. Теперь, если вдруг случится ошибка, вы будете проинформированы об этом. При чем, к вам на почту будут приходить и результаты работы скриптов. Однако, если данная функция вам мешает, ее можно и отключить, введя в конце задачи команду > /dev/null 2>&1.

Cron (крон), Crontab (кронтаб), Планировщик Задач - эти названия все, кто связан с «сайтостроением» слышали неоднократно. Так что же такое Cron? Как с ним работать? Зачем нужен Cron и как его правильно настроить? Все эти вопросы мы сегодня и разберем.

Первое что хочу сразу отметить: Cron , Crontab , Планировщик Задач - это всё одно и тоже, не смущайтесь от разнообразия названий.

В практике любого web-мастера, неизменно возникнет необходимость в запуске каких-либо задач по расписанию. Т.е. Вы просто прописываете нужную Вам команду, на выполнение какой-то задачи в заданное время, и всё. Дальше все происходит без Вашего участия – автоматически, и что самое приятное в нужное Вам время.

Например, Вам нужно периодически отсылать уведомления партнерам по электронной почте. Или Вы хотите установить автоматические поздравления или напоминания. Или у Вас есть каталог сайтов и Вы хотите чтобы с заданной периодичностью скрипт каталога проверял обратные ссылки и т.д. Все эти задачи можно запросто автоматизировать, поручив это Cron или, как ещё говорят – Планировщику Задач . А бывают скрипты в которых для нормальной работы Крон просто необходим.

Практически все современные Хостинги предоставляют уже готовую функцию Планировщика Задач . Если такой функции на Хостинге нет, то лучше не связывайтесь с такой Хостинговой компанией. Cron в наши дни - это уже не роскошь и если Хостинг не предлагает в пакете услуг планировщик задач, лучше поищите другую компанию, наверняка не будет и других важных функций.

Итак, давайте рассмотрим все практические действия по настойке Cron на примере русcифицированной cPane l (панели управления сайтом) Хостинговой компании Гудзон . Почему именно Гудзон ? Всё просто – здесь живет мой сайт и мне очень нравится этот Хостинг: полный пакет всех самых возможных услуг за очень умеренную цену.

Хотя настройка Планировщика Задач происходит примерно везде одинаково.

Заходим в панель управления сайтом, в данном случае это cPanel (бывают и другие). Доступ Вам предоставляется сразу же после покупки Хостинга , опускаемся ниже и находим вот такой раздел, Дополнительные инструменты :

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

"Планировщик задач позволяет вам запускать команды в указанное время без вашего участия. Это позволяет вам автоматизировать регулярно повторяющиеся работы. Планировщик задач настраиваются очень гибко и позволяют вам автоматизировать выполнение любых команд, которые вы захотите запустить. К примеру, вы можете указать планировщику удалять временные файлы каждую неделю, чтобы они не занимали слишком много места на вашем диске".

На выбор предоставляется два варианта управления Кроном:

Стандартный и Продвинутый (в стиле Unix) , рассмотрим каждый из них.

Первый вариант. Кликаем по кнопке Стандартный , открывается окно установки задач:

Как видите здесь все очень просто. Нужно просто установить время выполнения команды, указав для этого в соотвествующих полях, когда будет запускаться команда, во сколько: Минут , Час , День , Месяц , День недели . И конечно же прописать саму команду на запуск в поле: Команда для запуска .

Значения можно писать как в ручную (в левом поле), так и воспользоваться выпадающим списком (стрелочки справо).

Давайте разберемся, что мы здесь написали. А написали мы следующее задание: запускать команду на исполнение:
/usr/bin/php /home/freeman/domains/public_html/cron/new_day.php
каждые 30 минут, каждые 6 часов, каждый день января месяца, если он попадает на понедельник.

После установки задания нажимаем кнопку Add New Cron Job .

Не понятно что написали? :) Давайте расмотрим второй вариант, а затем поясню подробнее. Возвращаемся на преведущую страницу.

Второй вариант. Кликаем по кнопке Продвинутый (в стиле Unix) , открывается окно установки задач:

Этот вариант установки задания Крону, мне нравится больше. И хоть он и называется Продвинутый , на мой взгляд проще и удобнее.

Здесь так же как и в первом случае, нужно указать когда будет запускаться команда, так же указываем: Минут ы, Час ы, День , Месяц , День недели и само задание на исполнение в поле Команда . После этого нажимаем кнопку Добавить Cronjob . Задание задано. Страница обновляется:

И Вы можете добавить новое задание, повторив всю процедуру заново. Удалить задание можно нажав на крестик напротив задания справа.

Есть еще один не обязательный параметр, но я рекомендую его прописывать: это адрес электроной почты . На этот адрес будет приходить отчет об исполнении команды. Поле необязательное, но лучше адрес ввести, что бы быть в курсе дела, если что-то пойдёт не так Крон сообщит Вам об этом в письме, а если письмо пришло пустое значит всё ОК!

Что мы написали здесь? Запускать команду в 11 минут, каждого 2-го часа, каждый день, каждый месяц, 1-й, 3-й, 5-й, 7-й дни недели.

В поле выбора: Минут указываете минуту (или минуты) в которую будет запускаться задание, в поле Час указываете час (либо часы) в который(е) будет выполняться задание, а так же день(и), и месяц(ы), в каждом поле можно указать как конкретное время так и интервал.

Например, можно указать не просто 11 минут, а 11-15 (интервал), это значит, что задание будет запускаться каждые 11, 12, 13, 14, 15 минут. Или указать кокретные минуты, например: 11, 14, 18 - это значит что задание будет запускаться на 11, 14, и 18 минутах. Еще можно использовать знак * (звездочка) - обозначает каждый . Если поставить * (звездочку) в поле Минуты, то соотвественно задание будет запускаться каждую минуту, т.е. 60 раз в час.

В каждом поле можно указать, как конкретное время, так и интервал, а также использовать звездочки.

Запись */2 обозначает: каждые 2 часа . Все эти вариаты записей применимы ко всем полям (Минут ы, Час ы, День , Месяц , День недели ) при указании задания Крону. Сами понимаете вариантов может быть миллионы, Запускай задание на выполнение, хоть каждую минуту круглый год. Конечно такая необходимость практически никогда не возникает, но теоретически такая возможность есть.

И еще имейте виду некоторые Хостинги наклыдывают ограничения, на запуск Крона, например не чаще 3 - 10 раз в час. Почему? Создается довольно ощутимая нагрузка на сервер. За нарушение Ваш аккаунт могут заблокировать.

Теперь давайте разберемся как заполняется поле Команда для запуска (в первом варианте) или Команда (во втором варианте).

Задание задаётся следующим образом.

Первым делом вы указываете путь к PHP на Вашем сервере, у меня на сервере путь такой /usr/bin/php у вас может быть другим, уточните у админов вашего сервера, после пути к PHP ставите пробел и пишите полный внутренний путь к файлу который должен запускать Cron . Допустим мне необходимо чтобы Крон запускал файл mail.php , зная внутренний путь к файлу я пишу следующее:

public_html/cron/mail.php

т.е. в корневой папке public_html , есть папка cron в которой лежит файл mail.php а полностью команда на запуск файла mail.php будет вылядеть так:

/usr/bin/php /public_html/cron/mail.php

На разных хостингах, путь до PHP может отличаться, и записываться по разному, корневая папка расположения сайта тоже не всегда бывает public_html , поэтому если нет конкретного примера записи задания Крону, то лучше об этом спросить у администратора, описав что Вы хотите получить в итоге. Хорошая



Просмотров