Настройка Cron для Magento

[10 ноября 2016 г.]    Российская сборка Magento 2.49.12
Magento 2: модули и услуги
#1 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

26.11.2010 16:19

*********************************
Услуга настройки Cron
*********************************


Cron - это стандартный планировщик заданий в Unix-подобных система.
Именно такие системы обычно служат основной интернет-серверов, и ваш магазин тоже наверняка работает одна их них: Linux, Debian, FreeBSD и т.п...


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

Magento тоже любит планировать задания.
Именно по расписанию происходит:

  • пересчёт ценовых правил
  • новостные рассылки клиентам
  • обновление карты сайта
  • оповещение покупателей (например, о товаре, который покупатель ждёт)
  • обновление курсов валют
  • очистка БД от временного мусора


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

Если вы откроете папку с файлами движка Magento, то в корне вы увидите файлы cron.sh и cron.php
Это именно те скрипты, который нам нужен для настройки.
Если вы - администратор, то дальше вы уже знаете, что делать: пропишите запуск cron.sh или cron.php в crontab.

Если вы - не администратор, то почитайте в интернете, что такое crontab и как его редактировать.
Затем пропишите там запуск cron.php или cron.sh.
Рекоменуемая частота запуска — каждые 5-15 минут.
Например, эта команда будет запускать планировщик закдач Magento кажде 5 минут:
*/5 * * * * /bin/sh <абсолютный путь в файловой системе к magento>/cron.sh



Запуск планировщика Magento ещё не означает, что планировщик тут же выполнит все системные задачи.

Время и частота выполнения системных задач Magento задаётся соответствующими модулями Magento.
Например, скидки пересчитываются каждую ночь в 1 час ночи, а частота обновления карты сайта задаётся администратором.

Планировщик же при запуске смотрит, не запланировали ли модули какие либо задачи в некотором интервале от текущего запуска.
И если запланировали — выполнит их.

Я для большинства магазинов рекомендую настроить запуск планировщика каждые 5-15 минут — это согласуется со стандартными настройками планировщика.
Если же вы выберете более редкую частоту запуска планировщика, то не забудьте настроить сам планировщик (Система - Настройки - Система - Cron).
Иначе может получиться, что при редком запуске планировщик будет терять задачи.

#2 Василий Батищев
  • Группа: Пользователь
  • Сообщений: 41
  • Регистрация: 11.04.2011

08.05.2011 23:31

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

Цитата

root@27083:~# /bin/sh /home/all-store/www/cron.sh
PHP Deprecated: Comments starting with '#' are deprecated in /etc/php5/cli/conf.d/mcrypt.ini on line 1 in Unknown on line 0
root@27083:~# Site error: the file <b>/home/***/www/app/code/local/Df/Core/Model/Lib.php</b> requires the ionCube PHP Loader ioncube_loader_lin_5.3.so to be installed by the site administrator.


В общем и целом я понимаю, что это жалоба на отсутсвие Zend. Однако, очевидно, что зенд установлен и работает, - русская сборка запускается.

Как мне побороть этот недуг?

#3 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

08.05.2011 23:40

  • Неправильно понимаете. Система говорит об отсутствии ionCube PHP Loader, а не об отсутствии Zend Optimizer.
  • Ваш интерпретатор PHP использует разные настроечные файлы для режима обработки запросов через интернет (CGI, common gateway interface) и для режима локальной для операционной системы работы с командной строки (CLI, command-line interface).

    Видимо, команда загрузки расширения ionCube PHP Loader отсутствует в настроечном файле для режима CLI.

    Вам нужно добавить эту команда загрузки в один из настроечных файлов для режима CLI.

    Как видно из диагностического сообщения, настроечные файлы интерпнетатора PHP для режима CLI расположены у вас в папке /etc/php5/cli


#4 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

20.07.2011 11:11

Т.е., чтобы какие-либо задачи выполнялись периодически не хватит только установить magento, нужно ещё и планировщик cron на хостинге задействовать?

#5 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

20.07.2011 11:14

Да.

#6 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

20.07.2011 13:24

Стало интересной задачей запустить событие по расписанию из модуля. Вставил в config.xml
    <crontab>
        <jobs>
            <dotdigitalgroup_dotmailer>
                <schedule>
                    <cron_expr>5 * * * *</cron_expr>
                </schedule>
                <run>
                    <model>mynamespace_mymodule/observer::dailySynchronization</model>
                </run>
            </dotdigitalgroup_dotmailer>
        </jobs>
    </crontab>   

В observer.php в функции dailySynchronization отправляю себе письмо, дабы понять, что все что нужно произошло. Вначале поставил
<cron_expr>* * * * *</cron_expr>

каждую минуту как я понимаю. И да, при обращении к
http://сайт/cron.php
раз в каждую минуту приходит письмо, если пропустить пару минут, и обратиться, то приходит пару писем. Изменил на
<cron_expr>5 * * * *</cron_expr>
, но письма все равно идут каждую минуту. С чего бы это?

#7 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

20.07.2011 13:28

Надо обновить кеш.

#8 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

20.07.2011 13:34

System->Cache Management все отключено.

#9 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

20.07.2011 13:40

Ещё у вас ошибки в синтаксисе.
Для запуска работы каждые 5 минут надо использовать команду
*/5 * * * *

Ваша же команда
5 * * * *
выполнит работу только в 5-ю минуту каждого часа, то есть, будет выполняться раз в час.

#10 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

20.07.2011 13:47

В том то и проблема, что выполняется, по непонятным причинам, каждую минуту, хотя должно только в 5-ю минуту.

#11 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

20.07.2011 13:56

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

#12 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

20.07.2011 14:52

В задачи Cron нужно помещать cron.sh или cron.php, или нет разницы? В самих этих файлах ничего не нужно менять?

#13 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

20.07.2011 14:54

Обратите внимание, что Unix-подобные операционные системы не умеют интерпретировать программы на языке PHP.

#14 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

20.07.2011 14:59

Т.е. если хостинг на Linux, то только cron.sh? Сами файлы редактировать я так понимаю не нужно.

#15 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

20.07.2011 15:01

Да.

#16 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

20.07.2011 17:05

Не знаю в чем дело, но через cron.sh не хочет работать. Хостер объяснил, как Linux cron.php запускать, все вроде ровно работает.

#17 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

01.08.2011 12:24

Существует ли возможность проверить, работает ли крон? Т.е. в модуле мы прописали работу крон, но как известно без планировщика хостинга работа по расписанию происходить не будет. Как убедится что назначенные задания все таки выполняются? Хотелось бы уведомлять пользователя, если этого не происходит.

#18 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

01.08.2011 12:27

Убедиться можно путём проверки.

#19 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

01.08.2011 12:32

Запланировали отсылку SOAP запроса, получается на сайте ничего не меняется. Пользователь может не настроить, или не правильно настроить планировщик хостинга. Получается мы никак не сможем средствами модуля сообщить пользователю в админке: "работа по крон не ведется, проверьте настройки"?

#20 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

01.08.2011 12:33

Кого вы называете термином "пользователь"?

#21 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

01.08.2011 12:35

Имеется ввиду администратор магазина, который имеет доступ к странице настройки модуля.

#22 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

01.08.2011 12:37

Адмиистратору магазина можно написать инструкцию для проверки наличия в операционной системе программы cron.

#23 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

01.08.2011 12:42

Спасибо. Просто хотелось сделать жизнь администраторов немного легче. :)

#24 Сергей Каспирович
  • Группа: Пользователь
  • Сообщений: 32
  • Регистрация: 21.12.2011

10.01.2012 13:30

Пытаюсь настроить генерацию google sitemap.
В Каталог-Карта сайта Google создал карту сайта, Сгенерировал - УСПЕШНО
В Система - Конфигурация - Карта сайта Google настроил генерацию ежедневно в 16:00
Запустил из терминала руками генерацию и ничего.

В чем может быть ошибка?
Что же лучше запускать /bin/sh cron.sh или /bin/php cron.php?
Пути обязательно должны быть абсолютными?

#25 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

11.01.2012 15:23

Какое состояние, поведение или сообщение системы вы обозначили техническим термином «и ничего»?

#26 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

11.01.2012 22:29

Вообще, запуск планировщика Magento ещё не означает, что планировщик тут же выполнит все системные задачи.

Время и частота выполнения системных задач Magento задаётся соответствующими модулями Magento.
Например, скидки пересчитываются каждую ночь в 1 час ночи, а частота обновления карты сайта задаётся администратором.

Планировщик же при запуске смотрит, не запланировали ли модули какие либо задачи в некотором интервале от текущего запуска.
И если запланировали — выполнит их.

Я для большинства магазинов рекомендую настроить запуск планировщика каждые 5-15 минут — это согласуется со стандартными настройками планировщика.
Если же вы выберете более редкую частоту запуска планировщика, то не забудьте настроить сам планировщик (Система - Настройки - Система - Cron).
Иначе может получиться, что при редком запуске планировщик будет терять задачи.

#27 Ксения Юхименко
  • Группа: Клиент
  • Сообщений: 29
  • Регистрация: 26.04.2013

09.03.2016 20:35

Здравствуйте! Подскажите, пожалуйста, как настроить Cron, что бы транзакционные письма отправлялись моментально?
Спасибо

#28 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

10.03.2016 15:21

Без программирования теперь никак.
Вообще, судя по ситуациям с cron и виджетами, качество технических решений в Magento 1.x сильно упало. Видимо, это связано с переключением ключевых сотрудников Magento на Magento 2.

#29 Ксения Юхименко
  • Группа: Клиент
  • Сообщений: 29
  • Регистрация: 26.04.2013

10.03.2016 15:26

Спасибо

#30 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

06.05.2016 07:40

В Magento 2 администраторам магазинов вернули возможность мгновенной отправки транзакционных писем покупателям.

#31 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

09.10.2016 01:46

Добавил в Российскую сборку Magento подробное описание настроек раздела «Регулярные работы».

Поделиться темой: