sonyps4.ru

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

31 марта 2014 в 11:26

Делаем «жизнь» в Linux проще или автоматизация запуска процессов с помощью cron

  • Настройка Linux ,
  • *nix
Введение
Сидя вечером за ноутбуком и ковыряя изучая на виртуалке очередной дистрибутив Linux, я задался вопросом: А нельзя ли упростить рутинный запуск процессов? Если вам интересно, прошу под кат. Статья несёт информационный характер и расчитана, больше, на новчиков в ОС семейства Linux, но и опытные линуксоиды, возможно, смогут подчерпнуть что-то новое для себя.
Демоны atd и cron
Немного погуглив и почитав литературу, я узнал о двух демонах: atd и cron . От первого я отказался в виду его ограниченности и неудобства работы с ним. А вот о втором хочется рассказать подробней.
Если ваш компьютер, вдруг, как кажется, без причины, начнёт производить поиск по диску, присылать вам почту и т.д., то, скорее всего, это работа демона cron

Михаэль Кофлер «Linux. Установка, настройка, администрирование.» - СПб.: Питер, 2014

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

Если у вас установлен обычный дистрибутив, то вам не о чем беспокоится, cron инсталлируется автоматически. Если же минимальный, то не расстраиваемся - идём в терминал.
yum install vixie-cron //(RHEL - Red Hat Enterprise Linux)
или
apt-get install cron //(Deabian-подобные дистрибутивы)
Доступ юзерам к демону, настраивается в каталоге /var/spool/cron/tabs/user . Их права задаются в файлах /cron/allow и /deny . Добавляя пользователя в /allow мы разрешаем ему выполнять команду cron , а если добавить пользователя в /deny , то наоборот, пользователю будет запрещено пользоваться демоном.

Сам cron настраивается в каталоге /etc/crontab . Файл /crontab или файлы в /etc/cron. d содержат список команд, предназначенных для выполнения. Синтаксис таков:
in /etc/crontab [минута][час][день][месяц][неделя][пользователь][команда]
Например, если мне понадобится пинговать ya.ru через каждые 15 минут от имени суперюзера, то мне необходимо добавить следующее:
*/15 **** root ping ya.ru
Если в любом из первых пяти полей стоит символ *, то это поле игнорируется. В предыдущей команде не указаны ни месяц, ни неделя, следовательно, она будет выполнятся каждые 15 минут. Чтобы изменить конфигурацию воспользуйтесь в терминале командой vi или вручную измените содержание файла /etc/crontab .

Работа с.hourly, .daily, .weekly, .monthly
По умолчанию почти во всех дистрибутивах, файл /etc/crontab содержит всего несколько записей, необходимых для выполнения сценариев:
/etc/cron.hourly/* - сценарии выполняющиеся каждый час
/etc/cron.daily/* - сценарии выполняющиеся каждый день
/etc/cron.weekly/* - сценарии выполняющиеся каждую неделю
/etc/cron.monthly/* - сценарии выполняющиеся каждый месяц

Чтобы демон выполнял ваши команды, добавьте сценарий выполняющий команды в один из каталогов. Не забудьте установить бит execute(chmod a+x файл) . Если вы этого не сделаете, то у вашего сценария просто не будет доступа и он выполнятся не будет!
Для проверки, будет ли запускаться ваш сценарий, выполните команду
run-parts --test /etc/cron.daily
Если сценарий расположен в другом каталоге, то соответственно меняйте daily на monthly и т.д.
И помните, в имени сценария не может быть точек, любые символы, кроме точек. Команда run-parts просто-напросто игнорирует сценарии с точкой, не знаю почему.

Anacron
Помимо демона cron . в большинстве дистрибутивов установлен планировщик задач Anacron. Его задача - однократное (по требованию) выполнение сценариев /etc/cron.n где n может принимать три значения: daily , weekly , monthly . После их выполнения он завершает работу, а не висит в системе как cron . Так же Anacron не выполняет сценарии из каталога /etc/cron.hourly , это прерогатива cron . Глобальная конфигурация Anacron производится в каталоге /etc/anacrontab , но и дефолтных настроек обычно хватает.
P.S.
Для упрощения работы с повседневными задачами сисадмина работающего по ssh, целесообразней использовать cron и отключать Anacron, так как он выполняет задачи по одному разу, а cron игнорирует задачи, которые выполняет Anacron. В результате все задачи у вас будут выполнены только по одному разу. В большинстве дистрибутивов работа с демоном почти ничем не отличается, но если возникнут проблемы, воспользуйтесь wiki для вашего Linux.

, | |

На сегодня Cron является одним из наиболее распространенных способов автоматизации запуска процессов в Linux. Cron – это демон, который работает в фоновом режиме и позволяет планировать и автоматизировать запуск различных (в том числе и связанных с поддержкой сервера) задач. Для этого используется конфигурационный файл кронтаб (crontab).

Установка Cron

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

Ubuntu/Debian:

sudo apt-get update
sudo apt-get install cron

Cent OS/Red Hat Linux:

sudo yum update
sudo yum install vixie-cron crontabs

После завершения установки необходимо убедиться в том, что cron запущен в фоновом режиме:

sudo /sbin/chkconfig crond on
sudo /sbin/service crond start

Базовый синтаксис

Рассмотрим следующий пример задачи, запуск которой нужно спланировать:

5 * * * * curl http://www.google.com

Синтаксис планирования различных задач сначала может показаться запутанным. На самом деле он очень краток и прост, нужно просто разобраться, как его читать. Каждая строка делится на график и команду. В строку можно внести практически любую команду. График делится на 5 различных полей для планирования в следующем порядке:

<Минуты> <Часы> <Дни_месяца> <Месяцы> <Дни_недели>

Примеры использования cron

Данный раздел содержит примеры планирования наиболее общих задач.

Чтобы команда автоматически выполнялась каждую минуту:

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

Чтобы команда запускалась каждые 15 минут:

0,15,30,45 * * * *

Чтобы команда автоматически выполнялась каждый день в 4 утра:

Чтобы команда выполнялась каждый вторник в 4 утра:

График можно делить. То есть, вместо 0,15,30,45 можно использовать:

Обратите внимание на диапазон 2-6. Данный синтаксис будет запускать указанную команду с 2.00 до 6.00 утра каждые 15 минут.

Как видите, чрезвычайно мощный и гибкий синтаксис cron позволяет указать практически любой интервал времени.

Настройка cron

Разработав график выполнения задач, необходимо поместить его в правильной точке системы, чтобы демон мог найти и прочесть его. В целом, таких точек в системе несколько, но, как правило, такой график помещают в crontab пользователя. Как уже говорилось, crontab – это конфигурационный файл демона cron, который содержит график запуска определенных команд и программ. Этот файл находится в /var/spool/cron/crontab, но его не принято редактировать напрямую. Для внесения в файл нужных программ используется одноименная команда – crontab. То есть, чтобы отредактировать файл crontab, можно просто ввести:

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

Чтобы просмотреть crontab, не внося никаких изменений, используйте команду:

Очистить crontab можно с помощью следующей команды:

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

crontab -u <пользователь> -e

Вывод cron

После выполнения задачи cron отправляет выходные данные на электронный адрес пользователя (если только вывод не нужно направить в лог или /dev/null). Адрес электронной почты можно указать вручную, внеся параметр MAILTO в верхнюю часть crontab. Также можно указать оболочку, которую нужно запускать, путь к двоичному файлу cron и домашнему каталогу. Для этого:

сначала откройте crontab:

затем отредактируйте его следующим образом:

SHELL=/bin/bash
HOME=/
MAILTO=”example@some_user.com”
#This is a comment
* * * * * echo ‘Run this command every minute’

Данная строка вернет Run this command every minute. Демон cron будет отправлять такой вывод на почту example@some_user.com. Это, конечно, не очень удобно. Как уже говорилось ранее, данный вывод можно направлять в лог-файл, чтобы избежать подобных ситуаций.

Для этого нужно просто добавить:

* * * * * echo ‘Run this command every minute’ >> file.log

Примечание: символы >> направят вывод в лог. Кроме логов можно также использовать /dev/null при помощи следующего PHP-скрипта, работающего в фоновом режиме.

* * * * * /usr/bin/php /var/www/domain.com/backup.php > /dev/null 2>&1

Ограничение доступа к cron

Чтобы ограничить доступ к демону cron, нужно использовать файлы /etc/cron.allow и /etc/cron.deny. чтобы открыть (allow) или закрыть (deny) доступ определенному пользователю, нужно просто внести имя пользователя в соответствующий файл. По умолчанию демон cron доступен всем пользователям. Чтобы запретить доступ всем пользователям и предоставить доступ только пользователю example, нужно использовать следующую последовательность команд.

Недавно мне пришлось настраивать запланированную задачу на сервере, и в первый раз это трудно, и даже страшновато. Поэтому я решила написать статью об этапах настройки Cron . Мы создадим простой PHP-скрипт для отправки электронной почты один раз в день.

Необходимый базовый уровень

  • Базовый опыт работы с командной строкой;
  • Навыки работы с SSH на сервере Linux .

Задачи

  • Научиться настраивать простую запланированную задачу (задание cron ) в среде Linux-сервера ;
  • Установить задачу cron для отправки электронной почты ежедневно в указанное время.

Отправка электронной почты с помощью PHP

Сначала нужно создать простой PHP-скрипт для тестирования Cron Linux настройки. Я собираюсь создать файл, который отправляет электронную почту:

Если вы не знакомы с PHP-функцией mail() ознакомьтесь с официальной документацией . Я устанавливаю переменные, задающие получателя, электронный адрес отправителя, тему, содержание письма и заголовки. Это не самый современный или безопасный способ отправки электронной почты. Но это работает, поэтому я собираюсь использовать его для тестирования. Сохраняем код в файле cron.php .

Путь к публичной папке будет зависеть от дистрибутива Linux , но я поместила файл cron.php в /var/www/html/crontest . Поэтому полный путь к моему скрипту будет следующим: /var/www/html/crontest/cron.php . Вы можете протестировать этот скрипт непосредственно в браузере. Если адрес вашего сайта example.com , скорее всего, адрес файла будет example.com/crontest/cron.php . Если вы запускаете файл и получаете электронное письмо, значит, скрипт работает.

Localhost не настроен для отправки PHP-почты , поэтому этот скрипт должен запускаться из среды Linux .

Основной синтаксис Cron

Есть полезный сайт под названием Crontab Generator , который может настроить Cron PHP , но сначала мы кратко рассмотрим основной синтаксис.

Пример работы Cron :

* * * * * /usr/bin/php /var/www/html/crontest/cron.php > /dev/null 2>&1

Части команды cron

Команда cron состоит из четырех основных частей:

Время выполнения Выполнение PHP Путь к скрипту Результат * * * * * /usr/bin/php /var/www/html/crontest/cron.php > /dev/null 2>&1

Время выполнения — устанавливает минуты, часы, дни, месяцы и день недели.

Выполнение — задача cron должна вызвать PHP , который находится в папке /usr / bin / php .

Путь к скрипту — полный путь к файлу, который необходимо запустить.

Результат (необязательно ) — можно записать результат в файл или отбросить эту часть > /dev/null 2>&1 .

В приведенном выше примере задача Cron Linux настроена на отправку электронной почты каждую минуту часа ежедневно. Звездочка — это подстановочный знак, обозначающий «все ».

  • Минуты — установите минуты, от 0 до 59;
  • Часы — установите часы, от 0 до 24;
  • Дни — установите день, от 1 до 31;
  • Месяцы — установите месяц, от 1 до 12 (январь-декабрь );
  • Неделя — установите день недели, от 0 до 6 (воскресенье — суббота ).

Вот несколько простых примеров:

Синтаксис Пояснение 0 * * * * запускается один раз в час (каждую нулевую минуту каждого часа). 0 0 * * * запускается один раз в день (в полночь каждого дня в нулевую минуту). 0 0 1 * * запускается один раз в месяц (в первый день каждого месяца в полночь в нулевую минуту). 0 0 1 1 * запускается один раз в год (в первый день первого месяца в полночь в нулевую минуту).

Существуют и другие настройки, например, для нечетных / четных дней, каждые 5 минут и т. д. Также доступно множество ресурсов, на которых можно найти конкретные настройки.

Настройка задачи Cron

Если cron настроен под учетной записью root , тогда нужно запустить sudo перед запуском кода.

Команда cron называется crontab . Мы задаем для нашей задачи выполнение рассылки электронной почты один раз в день, так что полная команда будет такой:

0 0 * * * /usr/bin/php /var/www/html/crontest/cron.php >/dev/null 2>&1

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

crontab -l crontab: no crontab for user

Теперь мы отредактируем crontab :

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

Вот что нужно сделать:

  1. Нажмите esc ;
  2. Нажмите i , чтобы начать редактирование файла;
  3. Вставьте команду cron в файл;
  4. Снова нажмите esc , чтобы выйти из режима редактирования;
  5. Введите :wq , чтобы сохранить изменения в файле (w — write ) и выйти (q — quit ).

Теперь crontab сохранен, и электронное письмо должно отправляться один раз в день в полночь. Вы можете установить * / 5 * * * * — каждые 5 минут, чтобы проверить его работу.

Также можно добавить в файл несколько задач cron . Для этого поместите каждую команду в отдельную строку.

Перевод статьи «Setting Up a Basic Cron Job in Linux » дружной командой проекта

В системе Linux автоматический запуск заданий выполняется демоном crond , а составлять расписания для автоматического запуска заданий могут не только администратор системы, но и пользователи.

Как работает crond

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

Составление расписания заданий

Составление расписания - задача несложная. Расписание размещается в отдельном файле crontab . В каждой строке файла помещается задание, которое должно быть запущено в определенное время.

Формат записей файла crontab

Часть time-date (время-дата) состоит из пяти числовых полей, разделенных пробелами и определяющих время запуска задания:

Для удобства заполнения указанных полей введены следующие правила:

  • Можно указывать значения в виде численных интервалов. К примеру, интервал 1-3 в поле часов означает 1.00, 2.00 и 3.00 пополуночи, 2-4 в поле дня недели - вторник, среду или четверг.
  • Интервалы можно задавать с шагом больше единицы. Например, чтобы указать каждый второй час, начиная с полуночи, следует установить интервал 0-23 с шагом 2 через косую черту: 0-23/2
  • Звездочка (*) указывает полный интервал значений поля - от минимального до максимального. Например, в поле дня месяца звездочка означает интервал 0-31, в поле дня недели - 0-7
  • День недели или месяц можно указать первыми тремя буквами его (английского) названия

Примеры времени-даты

Несколько примеров заполнения полей времени-даты:

0 1 * * * Запуск задания ежедневно в 1.00 пополуночи 30 14 * * 0 Запуск задания по воскресеньям в 2.30 пополудни 0 23-7/2,8 * * * Запуск задания каждые 2 часа с 23.00 до 7.00 и в 8.00 0 12 * 1 mоn Запуск задания в полдень каждого понедельника января каждого года 0 12 2 feb * Запуск задания в полдень второго февраля каждого года

Поле command

Поле command (команда) отделено от полей времени-даты одним или несколькими пробелами и простирается до конца строки. Команды обрабатываются оболочкой /bin/sh .

Например, следующая запись в файле crontab предусматривает ежедневный запуск программы /usr/sbin/backup в 1.00 пополуночи:

0 1 * * * /usr/sbin/backup

Некоторым командам (например, mail) требуется ввод информации с устройства стандартного ввода. Это указывается при помощи знака процента (%). Первый такой знак обозначает начало стандартного ввода, каждый последующий - смену строки.

Редактирование файла crontab

Файл crontab редактируется командой crontab -e . Возможны два подхода:

  • создание нового файла со всеми записями, которые должны входить в файл crontab , с последующей его записью на диск под этим именем по команде crontab ;
  • непосредственное редактирование файла по команде crontab -e .

Запись из файла

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

0 1 * * * /usr/sbin/backup

Созданному файлу следует присвоить подходящее имя, например сron jobs . После того, как указанный файл создан, его содержимое необходимо записать в файл crontab командой:

~$ crontab cronjobs

Содержимое файла cronjobs полностью заменит содержимое файла crontab данного пользователя. Используя этот метод, любой пользователь может редактировать свой файл crontab . Суперпользователь обладает особым правом редактировать файлы crontab остальных пользователей. Редактирование чужого файла указывается флажком -u . Например, по команде:

~# crontab -u oleg cronjobs

файл cronjobs записывается как файл crontab пользователя oleg .

Непосредственное редактирование файла crontab

Команда crontab позволяет избежать многоступенчатой операции с созданием отдельного файла. Если ввести команду crontab с опцией -е, можно редактировать файл crontab непосредственно.

По умолчанию по команде crontab с опцией -е файл crontab загружается в редактор . Редактор Vi - мощный, хотя и сложный инструмент, популярный среди опытных пользователей Unix . Тот, кто предпочитает другой редактор, например Xedit , может установить соответствующее значение переменной среды EDITOR:

~$ export EDITOR=xedit

После этого ввод команды

приводит к открытию файла crontab в указанном редакторе.

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

~# crontab -u user-name -e

Просмотр файла crontab

Для просмотра содержимого файла crontab вводится команда:

Суперпользователь может просматривать файлы crontab остальных пользователей:

~# crontab -u username -l

Удаление файла crontab

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

Суперпользователь может удалять файлы crontab остальных пользователей.

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.



Загрузка...