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.
fonte
*/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 assimRespostas:
Era a versão PHP do Cron Jobs.
A versão do PHP foi definida corretamente para o site e é por isso que estava funcionando; no entanto, Cron Jobs estava sendo executado no PHP nativo do servidor 5.3, motivo pelo qual eu estava recebendo os erros apenas ao executar o Cron. Eu atualizei para a versão 5.5.
Comando Cron alterado:
ou no hostgator:
no cron.php
Após essa linha, adicione:
fonte
php -v
no terminal para ver qual versão do PHP o terminal está usando. No meu caso, era 5,6. Então eu tive que forçar o uso do PHP 7.0 mudandophp
paraea-php70
incrontab -e
. Obrigado!você tentou esvaziar a
cron_schedule
mesa? Verifique se está cheio de novas tarefas depois de uma hora ou mais.Além disso, você pode usar Aoe_Scheduler para desativar cronjobs específicos. Veja se algum em particular pode causar um erro que interrompe todas as outras tarefas.
A maneira como os cronjobs do Magento são configurados como um erro fatal em um script causará falha na execução de todas as tarefas
fonte
Como primeiro passo, sugiro reverter suas configurações para as configurações cron padrão do Magento:
Há um problema nas suas configurações atuais: sua agenda é gerada a cada 15 minutos, mas agendada apenas por 5 minutos, deixando um intervalo de 10 minutos.
fonte
$isShellDisabled = true;
e quando inicio o Cron.php via navegador, os trabalhos são selecionados, mas não via CronTab.php -f cron.php
e./cron.sh
verifique se eles produzem alguma coisa para investigar mais.O mesmo problema para mim.
Erro "Tarde demais ..." encontrado.
Após a limpeza da
cron_schedule
tabela, o cron.sh parou de funcionar (não está mais agendando).Funcionou apenas após matar todos os processos antigos de Cron.
fonte
Eu tive o mesmo problema. Meu problema foi específico do fuso horário: as colunas
created_at
escheduled_at
nacron_schedule
tabela devem ser UTC + 0, minhas entradas foram UTC + 2.Para verificar isso, você pode simplesmente definir as datas de
created_at
escheduled_at
para ontem e aguardar até o próximo cronograma.Espero que ajude alguém!
fonte
No Bluehost, na mudança cron.sh
para
Por padrão, na hospedagem compartilhada, ele executa o PHP 5.2.
Eu também tive que mudar
cron.php
, substituindo as duas$isShellDisabled
linhas por$isShellDisabled = true;
Para se livrar dos avisos do PHP, eu também adicionei essas linhas antes
fonte