Passei quase três dias e não consigo entender e criar o Magento Cron para processar as tarefas agendadas. Estou executando o Magento 1.9.1.0 e notei recentemente que os emails de pedidos agora estão na fila em vez de serem enviados instantaneamente. Entendo a necessidade, mas não consigo fazer com que o sistema escolha as filas.
Aqui está a minha opinião sobre Cronjob.
Aqui está minha linha de comando do cronjob.
Aqui está como as tarefas são criadas na tabela cron_schedule.
Como os registros são criados na tabela cron_schedule, acho que o Cron está sendo executado uma vez a cada 5 minutos. Se eu excluir manualmente esses registros via PhpMyAdmin, os registros serão criados automaticamente após algum tempo.
Mas o status das tarefas permanece "pendente" e nunca completo. Não tenho certeza se algo está errado na minha configuração ou se está faltando alguma coisa. Alguém pode me ajudar como executar a tarefa agendada no prazo. Também por que vários registros são criados para um código de tarefa?
Atualizar
Limpei a tabela inteira e o cron criou os trabalhos agendados. Todos os trabalhos estão em estado pendente e nunca são executados, mesmo aguardando mais de 60 minutos. Algo está errado no Magento 1.9.1
Atualização 11/02: Hoje fiz mais algumas análises sobre o processo.
Eu editei o cron.php como abaixo
echo 'iam before mdefault 1';
shell_exec("/bin/sh $baseDir/cron.sh $fileName -mdefault 1 > /dev/null 2>&1 &");
echo 'iam before malways 1';
shell_exec("/bin/sh $baseDir/cron.sh $fileName -malways 1 > /dev/null 2>&1 &");
echo 'i returned success';
Editei a classe Mage_Cron_Model_Observer como abaixo
public function dispatch($observer) {
echo 'iam inside dispath';
Meu entendimento era que quando o cron executa o comando -mdefault, ele deve chamar a função de despacho e a execução acontece. Mas o que aconteceu foi o seguinte na saída cron.
Content-type: text/html
iam before mdefault 1iam before malways 1i returned success
Isso significa que o despacho não chama todos ...
Uma outra tentativa
Mudei manualmente a variável $isShellDisabled = true;
e a seguir, no cron.php.
if ($isShellDisabled) {
echo 'before always';
Mage::dispatchEvent('always');
echo 'after always';
Mage::dispatchEvent('default');
echo 'after default';
} else {
Mage::dispatchEvent($cronMode);
}
A saída cron para o acima é como abaixo
Content-type: text/html
before alwaysiam inside dispath alwaysafter always
Agora ele chama o 'dispatchAlways', mas não o 'dispatch'
Nenhuma das respostas me ajuda. Ele nunca escolhe as tarefas agendadas. Ou seja, quando o Cron é executado pela primeira vez, ele criou com êxito as tarefas na tabela. Mas nunca executa a tarefa.
*/5 * * * * /bin/sh PATH_TO_PRODUCTION/cron.sh
se disponível.
cron_schedule
mesa? Verifique se ele ficar de preenchidos com novas tarefas depois de uma hora ou assim