Configurar um trabalho cron personalizado

Este tutorial passo a passo mostra como criar um trabalho cron personalizado e, opcionalmente, um grupo cron em um módulo de amostra. Você pode usar um módulo que já tem ou usar um módulo de amostra de nossa magento2-samples repositório.

A execução do trabalho cron resulta na adição de uma linha à cron_schedule tabela com o nome do trabalho cron, custom_cron.

Também mostramos como criar opcionalmente um grupo cron, que você pode usar para executar trabalhos cron personalizados com configurações diferentes dos padrões do aplicativo Commerce.

Neste tutorial, assumimos o seguinte:

  • O aplicativo do Commerce está instalado em /var/www/html/magento2
  • Seu nome de usuário e senha do banco de dados do Commerce são magento
  • Você executa todas as ações como proprietário do sistema de arquivos

Etapa 1: obter um módulo de amostra

Para configurar um trabalho cron personalizado, você precisa de um módulo de amostra. Sugerimos que o magento-module-minimal módulo.

Se você já tiver um módulo de amostra, poderá usá-lo; ignore esta etapa e a próxima e continue com a Etapa 3: Criar uma classe para executar o cron.

Para obter um módulo de amostra:

  1. Faça logon no servidor do Commerce como ou alterne para a proprietário do sistema de arquivos.

  2. Mude para um diretório que não esteja na raiz do aplicativo do Commerce (por exemplo, seu diretório inicial).

  3. Clonar o magento2-samples repositório.

    code language-bash
    git clone git@github.com:magento/magento2-samples.git
    

    Se o comando falhar com o erro Permission denied (publickey)., você deve adicione sua chave pública SSH a GitHub.com.

  4. Crie um diretório para o qual copiar o código de amostra:

    code language-bash
    mkdir -p /var/www/html/magento2/app/code/Magento/SampleMinimal
    
  5. Copie o código do módulo de amostra:

    code language-bash
    cp -r ~/magento2-samples/sample-module-minimal/* /var/www/html/magento2/app/code/Magento/SampleMinimal
    
  6. Verifique se os arquivos foram copiados corretamente:

    code language-bash
    ls -al /var/www/html/magento2/app/code/Magento/SampleMinimal
    

    Você deve ver o seguinte resultado:

    code language-terminal
    drwxrwsr-x.   4 magento_user apache  4096 Oct 30 13:19 .
    drwxrwsr-x. 121 magento_user apache  4096 Oct 30 13:19 ..
    -rw-rw-r--.   1 magento_user apache   372 Oct 30 13:19 composer.json
    drwxrwsr-x.   2 magento_user apache  4096 Oct 30 13:19 etc
    -rw-rw-r--.   1 magento_user apache 10376 Oct 30 13:19 LICENSE_AFL.txt
    -rw-rw-r--.   1 magento_user apache 10364 Oct 30 13:19 LICENSE.txt
    -rw-rw-r--.   1 magento_user apache  1157 Oct 30 13:19 README.md
    -rw-rw-r--.   1 magento_user apache   270 Oct 30 13:19 registration.php
    drwxrwsr-x.   3 magento_user apache  4096 Oct 30 13:19 Test
    
  7. Atualize o banco de dados e o esquema do Commerce:

    code language-bash
    bin/magento setup:upgrade
    
  8. Limpe o cache:

    code language-bash
    bin/magento cache:clean
    

Etapa 2: verificar o módulo de amostra

Antes de continuar, verifique se o módulo de amostra está registrado e ativado.

  1. Execute o seguinte comando:

    code language-bash
    bin/magento module:status Magento_SampleMinimal
    
  2. Certifique-se de que o módulo esteja ativado.

    code language-terminal
    Module is enabled
    
TIP
Se a saída indicar que a variável Module does not exist, revisar Etapa 1 cuidadosamente. Verifique se o código está no diretório correto. A ortografia e o uso de maiúsculas e minúsculas são importantes; se algo for diferente, o módulo não será carregado. Além disso, não se esqueça de executar magento setup:upgrade.

Etapa 3: criar uma classe para executar o cron

Esta etapa mostra uma classe simples para criar um trabalho cron. A classe grava apenas uma linha na variável cron_schedule tabela que confirma que está configurada com êxito.

Para criar uma classe:

  1. Crie um diretório para a classe e altere para esse diretório:

    code language-bash
    mkdir /var/www/html/magento2/app/code/Magento/SampleMinimal/Cron && cd /var/www/html/magento2/app/code/Magento/SampleMinimal/Cron
    
  2. Criou um arquivo chamado Test.php nesse diretório com o seguinte conteúdo:

    code language-php
    <?php
    namespace Magento\SampleMinimal\Cron;
    
    use Psr\Log\LoggerInterface;
    
    class Test {
        protected $logger;
    
        public function __construct(LoggerInterface $logger) {
            $this->logger = $logger;
        }
    
       /**
        * Write to system.log
        *
        * @return void
        */
        public function execute() {
            $this->logger->info('Cron Works');
        }
    }
    

Etapa 4: criar crontab.xml

A variável crontab.xml arquivo define um cronograma para executar seu código cron personalizado.

Criar crontab.xml como se segue no /var/www/html/magento2/app/code/Magento/SampleMinimal/etc diretório:

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

O anterior crontab.xml executa o Magento/SampleMinimal/Cron/Test.php uma vez por minuto, resultando na adição de uma linha à cron_schedule tabela.

Para tornar o cronograma cron configurável no Admin, use o caminho de configuração do campo de configuração do sistema.

<?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="Magento\SampleMinimal\Cron\Test" method="execute">
            <config_path>system/config/path</config_path>
        </job>
    </group>
</config>

Onde, system/config/path é um caminho de configuração do sistema definido em etc/adminhtml/system.xml de um módulo.

Etapa 5: Compilar e limpar o cache

Compile o código com este comando:

bin/magento setup:di:compile

E limpe o cache com este comando:

bin/magento cache:clean

Etapa 6: verificar o trabalho cron

Esta etapa mostra como verificar o trabalho cron personalizado com êxito usando uma consulta SQL no cron_schedule tabela de banco de dados.

Para verificar o cron:

  1. Executar trabalhos cron do Commerce:

    code language-bash
    bin/magento cron:run
    
  2. Insira o magento cron:run comando duas ou três vezes.

    Na primeira vez que você insere o comando, ele enfileira trabalhos; subsequentemente, os trabalhos cron são executados. Você deve inserir o comando pelo menos duas vezes.

  3. Executar a consulta SQL SELECT * from cron_schedule WHERE job_code like '%custom%' do seguinte modo:

    1. Enter mysql -u magento -p

    2. No mysql> , digite use magento;

    3. Enter SELECT * from cron_schedule WHERE job_code like '%custom%';

      O resultado deve ser semelhante ao seguinte:

      code language-terminal
      +-------------+----------------+---------+----------+---------------------+---------------------+---------------------+---------------------+
      | schedule_id | job_code       | status  | messages | created_at        | scheduled_at        | executed_at         | finished_at     |
      +-------------+----------------+---------+----------+---------------------+---------------------+---------------------+---------------------+
      |        3670 | custom_cronjob | success | NULL     | 2016-11-02 09:38:03 | 2016-11-02 09:38:00 | 2016-11-02 09:39:03 | 2016-11-02 09:39:03 |
      |        3715 | custom_cronjob | success | NULL     | 2016-11-02 09:53:03 | 2016-11-02 09:53:00 | 2016-11-02 09:54:04 | 2016-11-02 09:54:04 |
      |        3758 | custom_cronjob | success | NULL     | 2016-11-02 10:09:03 | 2016-11-02 10:09:00 | 2016-11-02 10:10:03 | 2016-11-02 10:10:03 |
      |        3797 | custom_cronjob | success | NULL     | 2016-11-02 10:24:03 | 2016-11-02 10:24:00 | 2016-11-02 10:25:03 | 2016-11-02 10:25:03 |
      +-------------+----------------+---------+----------+---------------------+---------------------+---------------------+---------------------+
      
  4. (Opcional) Verifique se as mensagens estão gravadas no log do sistema do Commerce.

    code language-bash
    cat /var/www/html/magento2/var/log/system.log
    

    Você deve ver uma ou mais entradas como as seguintes:

    code language-terminal
    [2016-11-02 22:17:03] main.INFO: Cron Works [] []
    

    Essas mensagens vêm do execute método em Test.php:

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

Se o comando SQL e o log do sistema não contiverem entradas, execute o magento cron:run comando mais algumas vezes e aguarde. Pode levar algum tempo para que o banco de dados seja atualizado.

Etapa 7 (opcional): configurar um grupo cron personalizado

Esta etapa mostra como configurar opcionalmente um grupo cron personalizado. Você deve configurar um grupo cron personalizado se quiser que seu trabalho cron personalizado seja executado em um cronograma diferente de outros trabalhos cron (normalmente, uma vez por minuto) ou se quiser que vários trabalhos cron personalizados sejam executados com configurações diferentes.

Para configurar um grupo cron personalizado:

  1. Abertura crontab.xml em um editor de texto.

  2. Alterar <group id="default"> para <group id="custom_crongroup">

  3. Saia do editor de texto.

  4. Criar /var/www/html/magento2/app/code/Magento/SampleMinimal/etc/cron_groups.xml com o seguinte conteúdo:

    code language-xml
    <?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="custom_crongroup">
            <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>
    

Para obter uma descrição do que significam as opções, consulte Personalizar referência de crons.

Etapa 8: verificar seu grupo cron personalizado

Este opcional A etapa mostra como verificar seu grupo cron personalizado usando o Administrador.

Para verificar seu grupo cron personalizado:

  1. Execute trabalhos Commerce cron para seu grupo personalizado:

    code language-bash
    php /var/www/html/magento2/bin/magento cron:run --group="custom_crongroup"
    

    Execute o comando pelo menos duas vezes.

  2. Limpe o cache:

    code language-bash
    php /var/www/html/magento2/bin/magento cache:clean
    
  3. Faça logon no Admin como administrador.

  4. Clique em Lojas > Configurações > Configuração > Avançado > Sistema.

  5. No painel direito, expanda Cron.

    Seu grupo cron é exibido da seguinte maneira:

    Seu grupo cron personalizado

recommendation-more-help
386822bd-e32c-40a8-81c2-ed90ad1e198c