Cron to narzędzie (w systemach Unix i Linux), które pozwala automatycznie uruchomić na serwerze cykliczne zadania o określonym czasie i dacie. Może to być włączenie jakiegoś skryptu, programu, procedury SSH itd. W Magento popularne usługi Crona to na przykład: masowe wysyłanie wiadomości email, aktualizacja cen, stanów magazynowych, generowanie map witryn Google lub feedów, reindex.
USTAWIENIE USŁUGI CRON W MAGENTO 2
Przykład
1. Utwórz nowy moduł np: Geek_Tester (app / code / Geek / Tester):
– zdefiniuj moduł w pliku module.xml (app / code / Geek / Tester / etc / module.xml):
1 2 3 4 |
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> <module name="Geek_Tester" setup_version="1.0.0" /> </config> |
– zarejestruj moduł w pliku registration.php (/ app / code / Geek / Tester / registration.php):
1 2 3 4 5 6 7 8 9 |
<?php // registration.php \Magento\Framework\Component\ComponentRegistrar::register( \Magento\Framework\Component\ComponentRegistrar::MODULE, 'Geek_Tester', __DIR__ ); |
2. Ustaw konfigurację Crona w pliku crontab.xml (/ app / code / Geek / Tester / etc / crontab.xml):
1 2 3 4 5 6 7 8 |
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/crontab.xsd"> <group id="default"> <job name="custom_cronjob" instance="Geek\Tester\Cron\Test" method="execute"> <schedule>* * * * *</schedule> </job> </group> </config> |
- <group> – znacznik grupujący zadania Crona; atrybut id=”default„ to identyfikator grupy,
- <job> – znacznik zadania ma trzy atrybuty: name=”custom_cronjob” – nazwę zadania, method=”execute” – nazwę metody wykonywanej w instancji: instance=”Geek\Tester\Cron\Test”,
- <schedule>* * * * *</schedule> – (harmonogram) czas na cykliczne wykonanie zadań z metody execute; w tym przypadku pięć gwiazdek oznacza, że „co minutę”.
Poniżej znaczenie poszczególnych symboli ” * ” (od lewej strony):
* – minuta (0 – 59)
* – godzina (0 – 23)
* – dzień miesiąca (1 – 31)
* – miesiąc (1 – 12)
* – dzień tygodnia (0 – 7) (Niedziela = 0 lub 7)
Przykład zadania uruchamianego co 5 minut:
1 |
<schedule>*/5 * * * *</schedule> |
3. Zapisz plik Test.php (app / code / Geek / Tester / Cron / Test.php). Metoda execute korzystając z interfejsu Logger zapisuje w logach serwera krótką informację „Test Cron” i datą wykonania zadania.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php // Test.php namespace Geek\Tester\Cron; use Psr\Log\LoggerInterface; class Test { protected $_logger; public function __construct( LoggerInterface $logger ) { $this->_logger = $logger; } public function execute() { $this->_logger->info('Test Cron: '.date("Y-m-d H:i:s")); } } |
4. Uruchom w wierszu poleceń poniższe procedury. Spowodują one aktualizację wpisów w bazie danych, kompilację kodu PHP i opróżnienie cache Magento.
1 2 3 4 |
$ bin/magento setup:upgrade $ bin/magento setup:di:compile $ bin/magento cache:clean $ bin/magento cache:flush |
5. Manualne wywołanie wszystkich zadań Crona:
1 |
$ bin/magento cron:run |
Polecenie należy powtórzyć dwa lub trzy razy. Przy pierwszym uruchomieniu Cron kolejkuje zadania a następnie uruchamiane są poszczególne zadania. Stany operacji zapisywane są do tabeli cron_schedule.
6. Otwórz plik system.log (var/log/system.log). Powinieneś otrzymać jeden lub więcej podobnych wpisów:
1 2 |
[2020-01-31 12:28:28] main.INFO: Test Cron: 2020-01-31 12:28:28 [] [] [2020-01-31 12:29:16] main.INFO: Test Cron: 2020-01-31 12:29:16 [] [] |
KONFIGURACJA NIESTANDARDOWEJ GRUPY ZADAŃ CRON
Jeśli chcesz aby zadania działały według niestandardowego harmonogramu lub z różnymi ustawieniami to zapisz plik konfiguracyjny cron_groups.xml (app / code / Geek / Tester / etc / cron_groups.xml):
1 2 3 4 5 6 7 8 9 10 11 12 |
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/cron_groups.xsd"> <group id="geek_group_name"> <schedule_generate_every>1</schedule_generate_every> <schedule_ahead_for>4</schedule_ahead_for> <schedule_lifetime>2</schedule_lifetime> <history_cleanup_every>10</history_cleanup_every> <history_success_lifetime>60</history_success_lifetime> <history_failure_lifetime>600</history_failure_lifetime> <use_separate_process>1</use_separate_process> </group> </config> |
Identyfikator grupy id=”geek_group_name” musisz zaktualizować również w pliku crontab.xml:
1 2 3 4 5 6 7 8 |
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/crontab.xsd"> <group id="geek_group_name"> <job name="custom_cronjob" instance="Geek\Tester\Cron\Test" method="execute"> <schedule>* * * * *</schedule> </job> </group> </config> |
Uruchom z wiersza poleceń grupę zadań Crona o nazwie geek_group_name:
1 |
$ bin/magento cron:run --group="geek_group_name" |
Ustawienia z pliku cron_groups.xml pojawią się dodatkowo w panelu admina w sekcji: Sklepy > Ustawienia > Konfiguracja > Zaawansowane > System – zakładka „Cron (Zaplanowane zadania)„:
