Как использовать cron на хостинге

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

Можно предположить, что неоднократно уличенные в любви к греческой мифологии разработчики unix неслучайно выбрали такое имя. Примерно так греки называли бога, олицетворявшего представление о времени. Так как unix-way предполагает краткость везде, где только можно, имя бога урезали: с «Cronus» (англоязычного написания) до «Cron», сделав его при этом абсолютно идентичным русскому «Крон».

Утилита cron использует файлы, названные идентично именам пользователей из /etc/passwd, и лежащие в /var/cron/tabs, для выполнения команд этих пользователей. Демон сам загружает их в оперативную память вместе с главным файлом /etc/crontab, имеющим несколько другой формат.

К примеру, на нашем хостинге утилита cron использует файлы с именами вида host12345, для планирования каких-либо действий пользователя host12345.

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

Есть некоторая разница в механизме исполнения команд из файла /etc/crontab и личных файлов пользователей /var/cron/tabs, которая заключается в проверке статуса пользователя. Для файлов /var/cron/tabs такая проверка выполняется для владельца аккаунта (с помощью модуля pam), для файла /etc/crontab — нет; команды из этого файла выполняются безусловно.

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

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

Таблица crontab состоит из 6 колонок, разделяемых пробелами или табуляторами. Первые пять колонок задают время выполнения (Минута, Час, День, Месяц, День недели), в них может находиться число, список чисел, разделённых запятыми, диапазон чисел, разделённых тире, или символ ‘*’. Все остальные символы в строке интерпретируются как выполняемая команда с её параметрами. Если команда отправляет какой-нибудь текст в стандартный вывод, этот текст отправляется по e-mail пользователю.

Как создать и отредактировать свой конфигурационный файл?

Редактировать конфигурационный файл можно двумя способами.

Способ первый – прямое редактирование через crontab.

  • Наберите в командной строке команду crontab -e. Откроется редактор vi с содержимым вашего конфигурационного файла. Если это первый запуск crontab‘а, то файл будет пустой.
  • Отредактируйте содержимое.
  • Выйдите из редактора. Crontab автоматически даст команду демону cron перечитать Ваш файл.

У этого способа есть один недостаток – редактор vi, в котором открывается файл, довольно сложен в использовании и требует определенного опыта и навыков.

Чтобы сменить редактор на более удобный, перед редактированием конфигурационного файла cron Вы можете добавить строку export EDITOR=mcedit в файл /home/login/.bash_profile, отредактировав файл с помощью команды mcedit

Способ второй – приказ демону cron перечитать готовый файл. Этот способ проще в использовании.

  • Создайте конфигурационный файл на сервере командой touch имя_файла.
  • Отредактируйте его в привычном для Вас редакторе, например в FAR ‘е.
  • Если Вам не нравится редактировать файл на сервере, то Вы можете создать и отредактировать файл на своем компьютере и затем закачать его на сервер по FTP . * Выполните команду crontab имя_файла. Crontab при этом даст команду демону cron перечитать Ваш файл.

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

Что нужно писать в конфигурационном файле?

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

  1. Минуты (0-59)
  2. Часы (0-23)
  3. День месяца (1-31)
  4. Месяц в году (1-12)
  5. День недели (0-6, при этом 0 означает воскресенье)
  6. Программа, которая будет запущена

Каждое из первых 5 полей может быть записано несколькими способами:

  1. Символом * (означает любое значение)
  2. Списком через запятую (1,2,3)
  3. Диапазоном через тире (1-31)
  4. Шагом значений диапазона (например */2 означает через_раз)

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

Где я могу получить дополнительную информацию?

Для получения дополнительной информации по этой теме можно воспользоваться встроенной справочной системой, набрав в командной строке сервера:
man cron – описание особенностей функционирования cron
man 1 crontab – описание способов использования crontab
man 5 crontab – описание формата конфигурационных файлов для cron

Как запускать php скрипт из cron’a?

Строка в кронфайле, запускающая php скрипт выглядит так:

где /usr/local/bin/php – путь до php-интерпретатора (на различных серверах путь может быть разным. Выяснить путь можно с помощью команды which php);
/home/user/www/site1/public_html/script.php – путь до скрипта необходимо указывать от корня сервера.

Мой php скрипт требует параметров в адресной строке, как можно вызвать такой скрипт?

Для запуска php-скриптов методом GET из cron`a используют утилиту wget. Строка записи cron-файла выглядит так:
* * * * * /usr/local/bin/wget ‘http://имя_домена/script.php?var1=xxx&var2=yyy’
Где /usr/local/bin/wget – путь до утилиты wget;
http://имя_домена/script.php?var1=xxx&var2=yyy – ссылка на скрипт.
В случае, если Вы не хотите, чтобы полученный от скрипта вывод сохранялся в файле, можно использовать вместо wget программу GET .

Как запустить perl скрипт из cron’a?

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

Если что-то не получается, всегда можно спросить у нас.

По материалам www.hostland.ru

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

Задания для 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-заданий и вам все станет более понятно.

Важно! /yourdirectory/myscript.pl — это должен быть абсолютный путь к файлу, а сам файл должен иметь определенные права доступа (минимум — право на выполнение и чтение для владельца файла 644).

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

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

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

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

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

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

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

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

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

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

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

Сохранить и выйти — :wq (если вы находитесь в режиме ввода теста, то чтобы удалить символ сначала нажмите Esc, а потом :wq).

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

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

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

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

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

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

20 3 * * 3 /yourdirectory/myscript.pl

Запускать задание 14 марта в 2 часа 10 минут ночи

1 0 14 3 * /yourdirectory/myscript.pl

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

15 3 1 * * /yourdirectory/myscript.pl

Для запуска 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).

Если вы до сих пор не поняли, что означают «30 3 * * 2», то вверху статьи мы это описали.

Единственное ограничение, которое может относится именно к Cron’ну — это ограничение на периодичность запуска. Например чтобы не перегружать сервер, провайдер может разрешать запуск Cron-заданий не чаще, чем один раз в час или полчаса. В остальном на эти задания действуют все те же ограничение, что и на сервер в целом (память ОЗУ, размер файла, время его выполнения и т.д.). Все эти ограничения задаются хостинг-провайдером и узнать их можно только у него.

Он перезагрузится вместе с сервером. ваши задания не пропадут, они будут работать как и ранее.

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

где info@mydomain.com — это e-mail на который будут приходить письма. Также можно добавить несколько адресов, через запятую.

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

По материалам ru.hostings.info