Spędziłem prawie 3 dni i nie mogę zrozumieć i zmusić Magento Cron do przetworzenia zaplanowanych zadań. Korzystam z Magento 1.9.1.0 i ostatnio zauważyłem, że e-maile z zamówieniami są teraz w kolejce zamiast natychmiastowego wysyłania. Rozumiem konieczność, ale nie mogę zmusić systemu do wybierania kolejek.
Oto moje spojrzenie na Cronjob.
Oto moja linia poleceń cronjob.
Oto jak tworzone są zadania w tabeli cron_schedule.
Ponieważ rekordy są tworzone w tabeli cron_schedule, myślę, że Cron działa raz na 5 minut. Jeśli ręcznie usunę te rekordy za pomocą PhpMyAdmin, rekordy zostaną utworzone automatycznie po pewnym czasie.
Ale status zadań pozostaje „w toku” i nigdy nie został ukończony. Nie jestem pewien, czy coś jest nie tak z moją konfiguracją, czy coś mi brakuje. Czy ktoś może mi pomóc, jak zaplanować uruchomienie zaplanowanego zadania na czas. Także dlaczego utworzono wiele rekordów dla jednego kodu zadania?
Aktualizacja
Wyczyściłem cały stół, a cron utworzył zaplanowane zadania. Wszystkie zadania są w stanie oczekiwania i nigdy nie są uruchamiane, nawet czekając dłużej niż 60 minut. Coś jest nie tak w Magento 1.9.1
Aktualizacja 11/02: Dzisiaj zrobiłem trochę więcej analizy tego procesu.
Edytowałem cron.php jak poniżej
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';
Edytowałem klasę Mage_Cron_Model_Observer jak poniżej
public function dispatch($observer) {
echo 'iam inside dispath';
Zrozumiałem, że kiedy cron uruchamia -mdefault, powinien wywołać funkcję dispatch i nastąpi wykonanie. Ale to, co się stało, było jak poniżej w wynikach crona.
Content-type: text/html
iam before mdefault 1iam before malways 1i returned success
Oznacza to, że wysyłka nie jest wywoływana w ogóle ...
Spróbujcie jeden inny
Ręcznie zmieniłem zmienną $isShellDisabled = true;
i zmieniłem poniżej w cron.php.
if ($isShellDisabled) {
echo 'before always';
Mage::dispatchEvent('always');
echo 'after always';
Mage::dispatchEvent('default');
echo 'after default';
} else {
Mage::dispatchEvent($cronMode);
}
Wyjście crona dla powyższego jest jak poniżej
Content-type: text/html
before alwaysiam inside dispath alwaysafter always
Teraz nazywa się „dispatchAlways”, ale nie „dispatch”
Żadna z odpowiedzi mi nie pomaga. Nigdy nie wybiera zaplanowanych zadań. To znaczy, kiedy Cron uruchamia się po raz pierwszy, pomyślnie utworzył zadania w tabeli. Ale nigdy nie wykonuje zadania.
*/5 * * * * /bin/sh PATH_TO_PRODUCTION/cron.sh
jeśli jest dostępny.
cron_schedule
stół? Sprawdź, czy po upływie około godziny zapełniają się nowe zadania