Magento 1.9.1 cron_schedule не вибирається ніколи


12

Я витратив майже 3 дні і не в змозі зрозуміти і змусити Magento Cron обробляти заплановані завдання. Я запускаю Magento 1.9.1.0 і нещодавно помітив, що електронні листи з замовленням тепер стають у чергу, а не надсилати миттєво. Я розумію необхідність, але не можу змусити систему вибирати черги.

Ось моє бачення Cronjob. введіть тут опис зображення

Ось мій командний рядок cronjob. введіть тут опис зображення

Ось як створюються завдання в таблиці cron_schedule. введіть тут опис зображення

Оскільки записи створюються в таблиці cron_schedule, я думаю, що Cron працює раз на кожні 5 хвилин. Якщо я видаляю ці записи вручну через PhpMyAdmin, записи створюються автоматично через деякий час.

Але статус завдань залишається "незавершеним" і ніколи не закінченим. Не впевнений, чи щось не так у моїй конфігурації чи я щось пропускаю. Може хтось, будь ласка, допоможе мені, як змусити вчасно виконати заплановане завдання. Також чому для одного коду завдання створюється кілька записів?

Оновлення

Я очистив всю таблицю, і у кроні було створено заплановані завдання. Усі завдання знаходяться в стані очікування і ніколи не виконуються, навіть очікуючи більше 60 хвилин. Щось не так у Magento 1.9.1

Оновлення 11/02: Сьогодні я зробив ще якийсь аналіз процесу.

Я редагував cron.php, як показано нижче

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';

Я редагував клас Mage_Cron_Model_Observer, як показано нижче

public function dispatch($observer) {
  echo 'iam inside dispath';

Я розумію, що коли cron запускає -mdefault, він повинен викликати функцію диспетчеризації, і виконання буде відбуватися. Але те, що сталося, було, як показано нижче, у виробництві кронів.

Content-type: text/html

iam before mdefault 1iam before malways 1i returned success

Це означає, що відправка не називається atall ...

Спробуйте ще один

Я вручну змінив змінну $isShellDisabled = true;і змінив нижче в cron.php.

if ($isShellDisabled) {
  echo 'before always';
  Mage::dispatchEvent('always');
  echo 'after always';
  Mage::dispatchEvent('default');
  echo 'after default';
} else {
  Mage::dispatchEvent($cronMode);
}

Випуск крона для вищезазначеного наведений нижче

Content-type: text/html

before alwaysiam inside dispath alwaysafter always

Тепер він називає "dispatchAlways", але не "dispatch"

Жодна з відповідей мені не допомагає. Він ніколи не вибирає заплановані завдання. Тобто, коли Cron працює вперше, він успішно створив завдання в таблиці. Але він ніколи не виконує завдання.


Що відбувається при запуску cron.php із веб-браузера? Це буде порожня сторінка, але я маю на увазі, що трапляється з вашими завданнями cron?
seanbreeden

Спробуйте скористатися скриптом bash: */5 * * * * /bin/sh PATH_TO_PRODUCTION/cron.shякщо такий є.
Філ Бірні

@seanbreeden, коли я перебігаю через URL в браузері, він показує порожню сторінку. З завданнями нічого не сталося .. Я оновив питання новим набором створених завдань ...
Malaiselvan

@PhilB, .sh не має значення. Це схоже, що майбутні завдання вирішуються назавжди, але я впевнений, що крон працює кожні 5 хвилин.
Malaiselvan

ти намагався спорожнити cron_scheduleстіл? Перевірте, чи не заповнюються нові завдання через годину або близько того
Sander Mangel

Відповіді:


3

Це була PHP-версія Cron Jobs.

Версія PHP була правильно встановлена ​​для сайту, тому вона працює; однак Cron Jobs працював на рідному сервері PHP 5.3, тому я отримував помилки лише під час запуску Cron. Я оновив версію 5.5.

Змінена команда Cron:

php /home/mydomainname/public_html/cron.php
to
php55 /home/mydomainname/public_html/cron.php

або в хостінгу:

/opt/php55/bin/php /home/mydomainname/public_html/cron.php

в cron.php

$isShellDisabled = (stripos(PHP_OS, 'win') === false) ? $isShellDisabled : true;

Після цього рядка додайте:

$isShellDisabled = true;

Згадка про запуск cron.php у конкретній версії PHP (у моєму випадку ea-php70) вирішила проблеми, з якими я стикався: запустіть php -vу терміналі, щоб побачити, яку версію PHP використовує термінал. У моєму випадку це було 5,6. Тому я повинен був змусити використання PHP 7.0, змінивши phpна ea-php70в crontab -e. Дякую!
Даан ван ден Берг

2

ти намагався спорожнити cron_scheduleстіл? Перевірте, чи не заповнена вона новими завданнями через годину або близько того.

Крім того, ви можете використовувати Aoe_Scheduler для відключення певних кронівок. Перевірте, чи може хтось із них спричинити помилку, яка зупиняє всі інші завдання.

Спосіб Magento Cronjobs встановить фатальну помилку в сценарії призведе до збою виконання всіх завдань


Дякую за відповідь. Чи зафіксована фатальна помилка в будь-якому журналі? Я оновив ще кілька висновків щодо своєї справи та оновив те саме у своєму запитанні.
Malaiselvan

@seanbreeden: Сьогодні я помітив, що коли я запускаю Cron.php через веб-браузер, він чудово працює, підбираючи графіки. Це доводить, що в жодному зі сценаріїв немає фатальної помилки. Будь-яка ідея, чому cron не працює через crontab?
Malaiselvan

2

В якості першого кроку я б запропонував повернути свої настройки до налаштувань Cron Magento за замовчуванням:

За замовчуванням Magento Cron

Існує проблема з вашими поточними налаштуваннями: ваш графік формується кожні 15 хвилин, але запланований заздалегідь на 5 хвилин, що залишає 10-хвилинний проміжок.


Дякую. Навіть після того, як я скинув до замовчування, це не працює. Під час першого запуску він створив усі завдання в таблиці cron_schedule із запланованим часом. Роботу ніколи не вибирають і залишаються в столі як завжди. Одне, що я помітив після налаштування, $isShellDisabled = true;і коли я запускаю Cron.php через браузер, завдання вибираються, але не через CronTab.
Malaiselvan

Ця проблема ще не вирішена. Чи буде проблема з моїм провайдером хостингу. Я бачу, що сценарій спрацьовує через рівні проміжки часу, але тільки завдання не вибираються. Також це буде проблема, оскільки я перейшов з 1,8?
Малазельван

Чи вистачає вашій кройовій роботі пам'яті? Спробуйте журнали помилок, щоб побачити, чи є щось там, що може допомогти.
Крістоф у Фомані

ця проблема ще не вирішена ... Щодня я ламаю голову. Журнали помилок? де я можу їх побачити?
Малайселван

@Malaiselvan щодо журналів помилок, будь ласка, зверніться до свого системного адміністратора чи веб-хостингу, як вони повинні знати місцезнаходження та як отримати доступ до журналу помилок сервера. Також це може допомогти вручну запустити завдання cron з командного рядка - спробуйте і те, php -f cron.phpі ./cron.shперевірити, чи вони створюють щось для подальшого дослідження.
Крістоф у Фомані

1

Та сама проблема для мене.

"Знайдено помилку ...".

Після очищення cron_scheduleтаблиці cron.sh перестав працювати (більше не планував).

Працював лише після вбивства всіх старих процесів Cron.


У моєму випадку, коли Cron працює вперше, він успішно створив завдання в таблиці. Але він ніколи не виконує завдання. :-(
Малайселван

1

У мене була така ж проблема. Моє питання було часовий пояс конкретним: created_atі scheduled_atстовпці в cron_scheduleтаблиці повинна бути UTC + 0, мої записи були UTC + 2.

Щоб переконатися в цьому ви можете просто встановити дати від created_atі scheduled_atдо вчорашнього дня і чекати до наступного розкладу хрон.

Сподіваюся, що хтось допомагає!


1

На Bluehost, в cron.sh змінити

 PHP_BIN=`which php`

до

 PHP_BIN="php54s"

За замовчуванням у спільному хостінгу він працює PHP 5.2.

Мені також довелося змінити cron.php, замінивши два $isShellDisabledрядки на $isShellDisabled = true;

Щоб позбутися попереджень PHP, я також додав ці рядки раніше

$_SERVER['SCRIPT_NAME'] = 

if (empty($_SERVER['SCRIPT_FILENAME'])) $_SERVER['SCRIPT_FILENAME'] = '~/public_html/cron.php';
if (empty($_SERVER['SCRIPT_NAME'])) $_SERVER['SCRIPT_NAME'] = '/cron.php';
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.