Em que fuso horário os trabalhos do cron do Magento estão sendo executados?

11

O fuso horário do meu sistema é EUA / Leste , minha loja padrão é EUA / Central e o banco de dados é UTC . A que horas será doStuffchamado o seguinte método?

<mymodule_do_stuff>
    <schedule><cron_expr>15 0 * * *</cron_expr></schedule>
    <run>
        <model>mymodule/observer::doStuff</model>
    </run>
</mymodule_do_stuff>

Atualização: eu executei este script.

echo date('r'), PHP_EOL;
require_once 'app/Mage.php';
Mage::app();

echo date('r'), PHP_EOL;

e pegou

Mon, 30 Dec 2013 18:01:33 -0600
Tue, 31 Dec 2013 00:01:34 +0000

Parece que o UTC é o que devo usar.

nachito
fonte
Sua configuração do fuso horário com a data / hora armazenada como UTC no banco de dados.
Fiasco Labs

Respostas:

9

O tempo padrão usado será o horário do sistema do linux. Use a datefunção na linha de comando para descobrir o que está definido.

O Magento 'sobrescreve' isso configurando o localepara o que você especificou durante a instalação da loja. Isso é especificado no System > Configuration > Generalpor loja ou no escopo padrão.

Sander Mangel
fonte
Eu não acho que isso esteja certo. Magento chama date_default_timezone_set('UTC')em Mage::isInstalled()que é chamado em cron.php. Onde está o localeconjunto para a loja padrão?
Nachito
3
por padrão, é UTC, mas, tanto quanto eu sei, ao inicializar uma loja, o escopo padrão também usa o código de idioma definido no sys / config. Corrija-me se estiver errado, mas mesmo o escopo de loja 0 usa as configurações de localidade definida
Sander Mangel
Sim, isso está correto para o M2 - se você observar module-cron/Model/Schedule.php, especificamente pelo trySchedule()método, verá onde ocorre a conversão do UTC para o fuso horário definido na configuração (incluindo um comentário indicando we assume that all schedules in configuration (crontab.xml and DB tables) are in admin store timezone)
Phil Birnie
3

Os horários armazenados na cron_scheduletabela estão no UTC, mas o Magento o converte no fuso horário configurado da sua loja ( general/locale/timezone) ao verificar se um trabalho deve ser executado.

Eu recomendo instalar o Aoe_Scheduler para ter uma idéia melhor de quando os trabalhos cron da sua loja estão sendo executados.

Steve Robbins
fonte
1

Olhando o código na função:

Mage_Cron_Model_Observer::_generateJobs

O horário agendado é baseado na hora da função PHP (), isso usa o fuso horário configurado para PHP (dependendo da sua configuração específica), mas eu diria que isso está configurado exatamente como o fuso horário do sistema (EUA / Leste).

Não foi possível encontrar um local em que haja um cálculo para o deslocamento de fuso horário usado.

Vladimir Kerkhoff
fonte
Eu não acho que isso esteja certo. Veja minha atualização
nachito
0

Abra o arquivo Mage_Cron_Model_Observere coloque um Mage :: log () logo após ou antes da
$now = time();linha

public function dispatch($observer)
    {
        $schedules = $this->getPendingSchedules();
        $scheduleLifetime = Mage::getStoreConfig(self::XML_PATH_SCHEDULE_LIFETIME) * 60;
        $now = time();
        Mage::log("cron timezone: " . date_default_timezone_get(), Zend_Log::DEBUG); // this will log the cron timezone into var/log/system.log file
        $jobsRoot = Mage::getConfig()->getNode('crontab/jobs');
        $defaultJobsRoot = Mage::getConfig()->getNode('default/crontab/jobs');
 . . . . .
}

Então, se você verificar var/log/system.log poderá saber exatamente qual fuso horário foi usado pelo Magento.

Sukeshini
fonte
E adicione / subtraia o deslocamento UTC para converter as datas armazenadas na tabela de log cron ou em outro local.
Fiasco Labs
0

Eles são acionados por sua configuração de localidade no Magento para o seu fuso horário com a data / hora armazenada como UTC no banco de dados.

O fuso horário do sistema em que o Magento está sendo executado pode ser separado da configuração do Magento.

Tudo isso é por observação. Meu servidor executa o MST, Magento é PST, o que significa que, durante parte do ano, os trabalhos cron externos divergem dos trabalhos cron do Magento em 1 hora, devido a um deles observar o horário de verão.

Se você deseja confirmação, instale o módulo AOE Scheduler e poderá lê-lo na passagem do mouse. Atualmente, a AOE está exibindo 16:30 PST, que é 16:30 PST.

Runtime: 2013-12-30   Server: 17:44:59 MST   Store: 16:44:59   Zulu: 00:44:59 UTC
Note: All logged times are UTC, your server timezone offset is -07:00 hours from UTC
Fiasco Labs
fonte