Кто такой Крон?
В Панели управления сайтом всегда есть панель запуска Крона - приложения серверной операционной системы, позволяющего либо в определённое время, либо с определённой периодичностью, запускать (в нашем случае) некоторый URL.
Такое приложение у хостера есть всегда, а если его почему-либо не имеется, значит, хостер не удовлетворяет требованиям, и он нам не интересен.
Сам Крон может быть обозван в Панели управления сайтом как угодно. В русских интерфейсах его обычно именуют Планировщиком задач, в не локализованных - Cron либо Crontab, по наименованию ассоциированной на Крона команды. Или Cron Jobs. Название абсолютно не важно. Важно только то, есть ли он, и умеете ли Вы им правильно пользоваться.
Чему и посвятим данный документ.
О частоте сработки Крона. Что нужно знать для расчёта.
Читать внимательно, ибо требуется понимание.
Любой хостер совершенно обязательно имеет лимиты на отправку писем пользователем своего хостинга. На сайте хостера об этом ничего может быть не сказано, но хостера без ограничений в природе не существует. Хотя бы потому, что иначе спамеры просто тупо угробят Сеть.
Поэтому будет нелишним узнать у своего хостера его лимиты на отправку писем.
Идеология ограничений может быть самой разнообразной:
- По стоимости тарифа.
На самом дорогом тарифе Агавы, например, есть ограничение в 900 писем в час- больше послать физически нельзя. На тарифе подешевле- 500 писем в час, и так далее.
Хостер может озвучить суточные лимиты.
Это неважно, пересчитать их в часовой лимит несложно. - Единый лимит.
Хостер знает максимальную пропускную способность своего сендера, делит её на число пользователей хостинга, и ограничивает каждого из пользователей полученным значением. Значение то обычно получается небольшим- порядка ста писем в час, или того меньше. - Лимиты, обусловленные фильтрами контента.
Экзотика, но тоже имеет место быть.
К примеру, на той же Агаве есть исходящие почтовые фильтры, не дающие посылать письма чаще, чем 4 штуки в секунду.
Также учтите, что Крон в понимании хостера есть второстепенное, но ресурсоёмкое приложение, и у популярных хостинговых компаний, обычно набирающих пользователей "под завязку", чтобы оборудование приносило максимально возможный доход, на обеспечение работы дополнительных приложений уже обычно не остаётся ресурсов. Либо их остаётся мало, и поэтому возникают ограничения на запуск Крона. Например, Вам могут заявить, что больше 12 раз в час запускать Крон нельзя, и баста. Пятиминутный Крон возможен, а чаще- даже не мечтай.
Теперь уже понимая, что жизнь у хостера непроста, и с ним нужно дружить, не внося своим необдуманным поведением ненужные осложнения в отношения, Вы в идеале должны потреблять только необходимые и достаточные ресурсы хостера, а не по максимуму. А потому требуется не просто вписать в задание крону предельные разрешённые значения, а оценить, что Вам в действительности необходимо.
Исходными данными для расчёта, как Вы уже поняли, служат два параметра:
a) Лимит на отправку писем в час.
b) Лимит на частоту запуска Крона в час.
Вычисление периода запуска Крона.
Зная два оговоренных выше лимита (спрашивайте о них у своего хостера) и свою потребность для рассылки, можно начинать деление циферок. Что, однако, тоже не просто для понимания.
Например, пусть у Вас в Почтовой Выхухоли заведено пять служб серийных рассылок, в каждой из которых сформировано по пять писем, и Вы наблюдаете, что на каждую из рассылок в день подписываются в среднем по 50 человек (это достаточно много, сайт должен иметь для этого многотысячную посещаемость).
Давайте считать, сколько же писем в сутки Вам нужно отправить.
250 подписчикам (умножаем 5 служб на 50 новых подписчиков) необходимо выслать письмо с подтверждением подписки, причём не все из них подтвердят свою подписку сразу. Возможно, некоторым с определённой периодичностью придётся потом напоминать о необходимости подтверждения подписки- Почтовая Выхухоль умеет делать это. Так что с поправкой на нерасторопность это будет уже не 250, а примерно 270 писем в сутки.
Имея ввиду подписавшихся ранее, получающих сейчас ежедневные письма серийных рассылок с первого по пятое, мы имеем ещё 5*50 писем для каждой из служб, или 1250 для всех пяти.
Простое суммирование даст нам 1520 писем в сутки, или, при делении с округлением, 64 письма в час. Это и есть наша истинная потребность, которую теперь надо как-то привязать к лимитам хостера.
Тут мы уже видим, что от хостера нам требуется возможность отправки не менее 64 писем в час. В противном случае нам придётся либо уменьшить число служб, либо переструктурировать их письма, чтобы писем в серии было не 5, а меньше - тогда мы сможем уложиться в лимит хостера.
Но допустим, что в часовой лимит по почтовым отправлениям мы уложились - пусть у нас для определённости возможна отправка скромного числа в 150 писем в час (хостинг совсем уж начального уровня) - и теперь нас интересует лимит по запуску крона.
Опять-таки возьмём средний случай, когда хостер разрешает пятиминутный крон. Это 12 сработок в час. Из чего следует, что при делении 64 ежечасных писем от всех наших серийных рассылок на 12 сработок Крона в час, с округлением с избытком, мы получаем необходимость отправки всего лишь 6 серийных писем за одну сработку Крона.
В этом месте мы вспоминаем, что настройками скрипта предусмотрена различная толщина для пачек писем серийных и новостийных рассылок (выпадающие формочки "слать писем за раз"). И будет правильным установить в первой из них пачку из 6 писем, раз так получилось из наших расчётов.
Теперь мы должны понять, сколько писем может быть в пачке для новостийных рассылок.
Это просто- 150 разрешённых писем в час делим на 12 сработок крона в час же, получаем 12 писем (с округлением в меньшую сторону), и отнимаем от этого числа шесть писем, отведённых для серийных рассылок. Итого в обеих формах нам требуется поставить по шестёрке.
Теперь произведём перерасчёт в обратном порядке, и зафиксируем, что 6*12*24=1728 - такое максимальное письмо писем в сутки мы можем отправить в рамках серийных рассылок, и, как следует из лимитов хостера, ровно столько же мы можем послать и в рамках новостийных рассылок.
Как обстоят дела в действительности:
Если взять реальный манимейкерский проект, например, этот, в рамках которого также имеется серийная рассылка из четырёх писем, на которую в сутки подписывается всего-то десяток человек, то нетрудно посчитать: суточная потребность всего проекта составляет ничтожные 50 писем.
Поскольку вебмастер проекта не страдает ерундой, и старается потреблять от хостера минимально возможные ресурсы, он запускает Крон всего раз в час.
Поэтому так получается, что пачка писем для серийных рассылок может содержать всего два письма. Этого вполне достаточно.
Если пачку для новостийных рассылок установить на уровне 20 писем, то в случае необходимости оповестить о чём-то важном всю подписную базу из 10 тысяч человек, на это уйдёт недели три. Что может показаться колоссальным сроком, но только в том случае, если Вы спамитесь по подписной базе с какой-нибудь ерундой (поздравлениями с очередным ничего не значащим праздником, которые обычно выкидываются, не читая, и так далее). А вот если Вы взаимодействуете со своими подписчиками, то растянутость процесса во времени очень даже кстати- у Вас есть время на обстоятельную переписку с теми, кто ответил, и обработку заказов.
Если же надо что-то разослать довольно быстро, то в задании Крону в графе минут меняем 5 (запуск Кроном задания в каждую пятую минуту каждого часа) на */5 (запуск задания каждые пять минут), и рассылка уходит менее чем за двое суток. Не нарываясь на жестокие антиспамовые фильтры почтовых сервисов.
По завершении такой форсированной рассылки, как только Почтовая Выхухоль отчитается об её выполнении письмом на email админа, переключаем Крона обратно на ежечасное срабатывание. Ибо незачем напрягать хостера впустую - процесс стреляния из пушки по воробьям редко у кого находит понимание.
Если с примерами всё более-менее понятно, то к этому моменту Вы уже знаете, что именно писать в задание Крону. По крайней мере, с периодичностью запуска Крона и толщинами пачек писем в настройках скрипта никакой недосказанности оставаться не должно.
Конфигурирование Крона:
В панели управления сайтом разыщите панельку Крона, и, если есть такая возможность, перейдите на вариант юниксоподобного представления, который не заточен под ламера, а даёт вебмастеру максимальные возможности, и выглядит вот так аскетично, и даже как-то несолидно:
Разберёмся, где у этого задания что, прямо по номерам полей:
- Минуты.
Если написать 5 то сработка будет раз в час, чётко с наступлением пятой минуты часа.
Если указать */5 то получите 12 сработок в час.
Сама запись расшифровывается "каждую пятую минуту каждого часа", либо "с интервалом в пять минут".
Пожалуйста, понимайте разницу между двумя этими случаями. - Часы.
Обычно ставится звёздочка *
Запись имеет смысл "срабатывать каждый час". - День. Тоже ставим звёздочку.
- Месяц. Аналогично.
- День недели. Звёздочка.
- Собственно команда Крону.
То, что было раньше, определяет, когда срабатывать.
А теперь мы указываем, что именно делать.
Вы видите, что в простейшем случае запись элементарна. Но это не означает, что нельзя реализовывать какие-то сложные конструкции, так как в первые пять полей в юниксоподобной версии Крона можно вписать очень затейливые вещи (которые нельзя реализовать в версии панельки Крона для бегиннеров, где есть только выпадающие формочки с предустановленными значениями).
К примеру, мы можем в поле часов поместить не звёздочку, а цифры через дефис: 9-18 - в этом случае Крон станет срабатывать с 9 утра до 6 вечера по серверному времени, и в соответствии с настройками других полей.
Точно так же в пятом поле дня недели можно употребить не звёздочку, а указать конкретные дни выхода в эфир. Помня, что 0 ответственен за воскресенье, 1 - за понедельник, и так далее, до 6 (суббота). И, если нам нужна рассылка только в рабочие дни, то так и можем записать в пятое поле:
Для блюдущих шабад показаны записи
И, наконец, мы дошли до самого важного, шестого поля задания Крону. Где указана команда, URL перехода, область вывода. Всё это пишется в одну строку и в одно поле, разделяясь пробелами:
- Команда GET
Имейте ввиду, что тут указана команда для классического Unix и юниксоподобного хостинга, максимально близкого к Unix. Например, у автора скрипта хостинг именно такой.
Однако в силу распространённости бесплатных и свободных от лицензирования решений, команда может быть другой. Например, wget (опять-таки стандартизованный вариант, наиболее вероятный), либо что-то совсем странное.
Как Вы уже поняли из раздела требований к хостеру, узнавать написание команды надо именно у саппорта хостера, так как только саппорт в точности знает написание команды. Никто кроме саппорта хостинга о написании команды Крону даже понятия не имеет.
В этом месте у начинающего вебмастера может возникнуть встречное предложение: "ну ты напиши команду хоть для нескольких самых популярных хостингов. Мы ж на 90 процентов живём на Джино каком-нибудь, вот и будем счастливы".
Не так всё просто.
На любом хостинге вовсе не одна серверная стойка. Их десятки и сотни, заполняемые юзерами по мере наращивания клиентской базы. Разные тарифы, предлагающие разный тип хостинга (FreeBSD, Linux, клоны Unix, Windows). И даже в пределах одного типа серверной операционной системы существует масса её версий, с неизбежно вытекающим отсюда варьированием синтаксиса Крона.
Пользователи вовсе не обязаны находиться в пределах действия одного и того же синтаксиса крона, будучи разбросанными по разным тарифам и разным серверам, пусть и в пределах одной хостинговой площадки.
Так что за синтаксисом Крона - однозначно к саппорту своего хостера. - URL перехода. Тут это http://site.ru/sender/cron.php
Наверное, нет нужды оговаривать, что Вы должны указать реальный URL до своего крона пхп.
А также то, что это должен быть именно URL, а не путь до локального файла в структуре сервера.
Даже если хостер посоветует вписать сюда именно локальный путь, а не URL.
Тот, кто не видит разницы между локальным путём и URL-ом, и плевать хотел на соблюдение данного пункта инструкции, будет наказан слётом прав доступа, эррорами на страницах скрипта, и категорическим отказом скрипта работать дальше. - Устройство вывода > /dev/null
Как и любое приложение, Крон по исполнении своей работы должен отчитаться, и записать отчёт в лог, либо куда-то его переслать. Как правило, для этого используется специальный email, который нужно ввести на той же странице Панели управления сайтом, где перечислены все задания Крону.
Безусловно, Вам не доставит удовольствие получать десятки, а то и сотни писем в сутки с отчётами о том, что в такое-то время Крон посетил такой-то URL по восьмидесятому порту, получил от приложения в этом УРЛ-е хедер 200 ОК, выполнив обращение за столько-то милисекунд.
Если Вы не станете указывать свой email Крону, то тот найдёт выход из положения, начав создавать файлики отчёта в корне сервера. Которые Вам там тоже абсолютно не нужны. Особенно в числе нескольких десятков тысяч штук, накопившихся со временем.
Чтобы избавить себя от всех этих напастей, и указывается вывод на нулевое устройство, чтобы Крон с точки зрения пользователя работал в совершенно прозрачном режиме, не оставляя никаких следов в виде логов или отчётов. Ибо нулевое устройство для того и создано, чтобы в нём исчезали бесследно любые данные.
И, как водится, синтаксис вывода на нулевое устройство, который стандартно и традиционно именно таков, в Вашем конкретном случае может быть другим, о чём и надо пытать саппорта хостера.
Чем озадачить Крон:
Имеется всего два сервиса, URL-ы которых следует запускать Кроном:
-
Рассыльщик cron.php
Периодичность его запуска Вы уже знаете как вычислять, а задание - как прописывать.
Его URL должен быть понятен. Расширение файла .php, хотя отзовётся и на вариант с .htm -
Бэкапер backup.php
Архивирует данные, храня их положенное время.
Создаёт ежедневную отчётность на email админа.Запускать нужно раз в сутки, прописав в первое поле задания Крону любое значение от 0 до 59, а во второе поле также любой час от 0 до 23.
Выбор точного времени архивирования данных Почтовой Выхухоли есть дело вкуса, однако из общих соображений рекомендуется делать это в часы наименьшей нагрузки на хостинг (часа 4 утра), а значение в поле минут явно не стоит ставить ноль или единицу. Как правило, в это время срабатывает масса всяких других приложений того же назначения на других аккаунтах. Напишите в поле минут 17 например.
При этом отдавайте себе отчет, что время запуска Крона всегда серверное, а не притянутое за уши к желаемому часовому поясу, как рекомендовано в разделе про основные настройки.
И в заключение по теме Крона совсем маленький секрет.
Обращение Крона именно к УРЛ-ам позволяет держать Почтовую Выхухоль на одном сервере (где, быть может, вообще нет никакого Крона, а потому скрипты аналогичного назначения там жить не могут, ввиду чего пользователи из-за отсутствия конкуренции за ресурсы имеют совершенно шикарные лимиты на отправку писем), а систему запуска рассыльщика и бэкапа - на другом сервере.
Если Вы понимаете, чем это Вам улыбается, тут Вы имеете фору перед конкурентами.