Come eseguire cron job in un determinato momento in Magento 2?

Aug 20 2020

Voglio creare un cron job che aggiorni il prezzo del prodotto disabilitato e il cron venga eseguito a un'ora specifica 1 volta in un giorno.

Ho creato un modulo di base personalizzato prendendo come riferimento da https://www.mageplaza.com/devdocs/magento-2-create-cron-job/

Il mio crontab.xml (percorso: app / code / Product / Cron / etc / crontab.xml)

<?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 instance="Product\Cron\Cron\Test" method="execute" name="mageplaza_helloworld_cron">
        <schedule>*/1 * * * *</schedule>
    </job>
</group>
</config>

il mio test.php è

<?php

namespace Cron\Run\Cron; (path : app/code/Product/Cron/Cron/Test.php )

class Test
{

public function execute()
{

    $writer = new \Zend\Log\Writer\Stream(BP . '/var/log/cron.log'); $logger = new \Zend\Log\Logger();
    $logger->addWriter($writer);
    $logger->info(__METHOD__); return $this;

}
}

Ma non mi mostra il messaggio nel file cron.log. Quello che mi manca è apprezzato.

Risposte

1 Msquare Aug 20 2020 at 12:53

Aggiungi questi file al tuo modulo personalizzato e controlla prima che il modulo sia abilitato o meno. Il tuo modulo deve essere abilitato.

Crea una classe per eseguire cron

app / code / VendoreName / ModuleName / Cron

Test.php

<?php
namespace VendoreName\ModuleName\Cron;

use Psr\Log\LoggerInterface;

class Test {
    protected $logger; public function __construct(LoggerInterface $logger) {
        $this->logger = $logger;
    }

    public function execute() {
        $this->logger->info('Cron Works');
    }
}

Crea crontab.xml

app / code / VendoreName / ModuleName / ecc

crontab.xml

<?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="VendoreName\ModuleName\Cron\Test" method="execute">
            <schedule>* * * * *</schedule>
        </job>
    </group>
</config>

Compilare e pulire la cache

bin/magento s:up
bin/magento setup:di:compile
bin/magento cache:clean

Verifica il cron job

Questo passaggio mostra come verificare correttamente il cron job personalizzato utilizzando una query SQL sulla tabella del database cron_schedule.

  1. Esegui lavori cron di Magento:
bin/magento cron:run
  1. Inserisci il cron di magento: esegui il comando due o tre volte.

La prima volta che si immette il comando, mette in coda i lavori; successivamente, vengono eseguiti i cron job. Devi inserire il comando almeno due volte.

  1. Esegui la query SQL SELECT * da cron_schedule WHERE job_code come '% custom%'
  1. Verifica che i messaggi vengano scritti nel registro di sistema di Magento:
var/www/html/magento_root/var/log/system.log

Fare clic qui per ulteriori informazioni

Spero che questo ti aiuta.