Cron — важная утилита, которая позволяет вам запускать скрипты через определенные регулярные промежутки времени. Это стало важным аспектом и для веб-приложений. Существует множество способов использования cron для веб-сайтов: от отправки регулярных рассылок до синхронизации базы данных со сторонними системами. Вы также можете использовать cron для очистки внутреннего хранилища, чтобы повысить общую производительность приложения.
Magento поддерживает cron в самом ядре, как и в некоторых других утилитах! Это позволяет вам настроить запланированные задачи в модуле, чтобы они могли выполняться через равные промежутки времени. Magento выполняет все задачи cron, используя файлы «cron.sh» и «cron.php», расположенные в корне сайта. Поэтому вам необходимо убедиться, что вы настроили системный уровень cron для регулярного запуска файла cron.sh, который в конечном итоге запускает систему cron Magento. И, наконец, Magento собирает все задания cron, расположенные в модулях, и запускает их при необходимости в этом конкретном запуске cron.
Хотя Magento уже предоставил множество заданий cron в самих основных модулях, вы также можете создать настраиваемую задачу cron в своем модуле. А создание собственного модуля — это именно то, о чем мы будем говорить в следующих разделах.
Взгляд на настройку файла
Мы создадим простой пользовательский модуль с именем «Customcron». Вот список файлов, необходимых для желаемой настройки:
- app / etc / modules / Envato_All.xml: это файл, который используется для включения нашего пользовательского модуля.
- app / code / local / Envato / Customcron / etc / config.xml: это файл конфигурации модуля, в котором мы объявим пользовательское задание cron.
- app / code / local / Envato / Customcron / Model / Customcron.php: это файл модели, в котором мы определим логику работы cron.
Пользовательский модуль: настройка файлов и папок
Во-первых, нам нужно создать файл включения модуля. Создайте файл «app / etc / modules / Envato_All.xml» и вставьте следующее содержимое в этот файл. Мы использовали «Envato» в качестве пространства имен нашего модуля и «Customcron» в качестве имени модуля. Он включит наш модуль «Customcron» по умолчанию.
1
2
3
4
5
6
7
8
9
|
<?xml version=»1.0″?>
<config>
<modules>
<Envato_Customcron>
<active>true</active>
<codePool>local</codePool>
</Envato_Customcron>
</modules>
</config>
|
Далее нам нужно создать файл конфигурации модуля. Создайте «app / code / local / Envato / Customcron / etc / config.xml» и вставьте следующее содержимое в этот файл.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
<?xml version=»1.0″?>
<config>
<modules>
<Envato_Customcron>
<version>1.0</version>
</Envato_Customcron>
</modules>
<crontab>
<jobs>
<custom_cron_task>
<schedule>
<cron_expr>5,10,15,20,25,30,35,40,45,50,55 * * * *</cron_expr>
</schedule>
<run>
<model>customcron/customcron::customcrontask</model>
</run>
</custom_cron_task>
</jobs>
</crontab>
<global>
<models>
<customcron>
<class>Envato_Customcron_Model</class>
</customcron>
</models>
</global>
</config>
|
Файл «config.xml» выглядит довольно просто — он объявляет номер версии и классы моделей в соответствии с соглашениями Magento. Тем не менее, важным тегом для нас является <crontab>
, который используется для объявления всех заданий. Это один из «наблюдателей событий», который используется Magento для сбора всех заданий cron в модулях.
Кроме того, под <jobs>
мы объявили нашу пользовательскую работу crontab, используя <custom_cron_task>
. Это своего рода уникальный идентификатор для задания cron. Хотя в приведенном выше файле мы создали только одну задачу, вы можете настроить несколько заданий cron под <jobs>
. Далее в разделе <custom_cron_task>
мы определили теги <schedule>
и <run>
.
Тег <schedule>
определяет интервалы cron внутри <cron_expr>
с которыми задание будет выполняться регулярно. В нашем случае пользовательская задача cron будет запускаться каждые пять минут. Но подождите, что он будет делать каждые пять минут? Это именно то, что означает тег <run>
! Он объявляет «Метод модели», который будет вызываться Magento во время пользовательского запуска задания cron.
Далее мы создадим файл модели «Cronjob.php». Создайте «app / code / local / Envato / Customcron / Model / Customcron.php» со следующим содержимым.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
<?php
class Envato_Customcron_Model_Customcron
{
public function customcrontask()
{
// send email
$mail = Mage::getModel(‘core/email’)
->setToEmail(‘[email protected]’)
->setBody(‘Body of the Custom Cron Task Goes Here’)
->setSubject(‘Subject: Custom Cron Task (every 5 minutes) ‘.date(«Ymd H:i:s»))
->setFromEmail(‘[email protected]’)
->setFromName(‘Magento Store Admin’)
->setType(‘html’);
$mail->send();
}
}
|
Итак, как мы объявили ранее, мы определили метод модели «customcrontask». В этом методе мы просто отправляем электронное письмо с помощью утилиты класса электронной почты Magento. Но что еще более важно, этот метод будет вызываться регулярно, при каждом запуске задания cron, конечно, каждые пять минут.
И, наконец, вы должны убедиться, что вы создали запись cronjob в вашей системе. Для Linux вам просто нужно добавить следующую строку в ваш файл crontab.
1
|
5,10,15,20,25,30,35,40,45,50,55 * * * * /bin/sh /path/to/magento/site/cron.sh
|
Вам просто нужно заменить «/ path / to / magento / site» на фактический путь установки Magento. А для Windows вы можете сделать то же самое, используя запланированные задачи. Однако в Windows вам необходимо использовать файл «/path/to/magento/site/cron.php», так как «cron.sh» не поддерживается.
Так что действительно легко подключить ваши пользовательские задания cron в систему cron Magento! На сегодня все, и я надеюсь, что вы узнали что-то полезное в Magento. Поделитесь своими мыслями, используя канал ниже!