Перейти к основному содержанию

Drupal 9 — ошибка при запуске Cron

Drupal 9

Убил сегодня утром два часа на то, чтобы найти корень проблемы. Пытаюсь запустить Cron через админку: Администрирование → Конфигурация → Система → Cron → Запустить cron. А он не запускается, выдаёт ошибку.

Как бы нехорошо. Я тут собрался переиндексировать поисковые индексы, а оно не работает... Вечером сбросил индекс, а он утром до 100% так и не добрался, хотя должен был.

Первым делом полез в логи PHP, а там:

[07-Aug-2022 10:29:11 Europe/Moscow] PHP Fatal error: Maximum execution time of 240 seconds exceeded in drupal\core\lib\Drupal\Core\Database\StatementWrapper.php on line 145

Очень странно. Первая странность в том, что при попытке запустить Cron вручную никаких 240 секунд не проходит, ошибка выдаётся моментально. А вторая странность в том, что таймаут 240 секунд у меня нигде не настроен. Лезу в код и нахожу в \core\lib\Drupal\Core\Cron.php вот такую строку:

    // Try to allocate enough time to run all the hook_cron implementations.
    Environment::setTimeLimit(240);

Ай-ай-ай. Костыли в коде. Эту штуку нужно было в конфиг вынести. Но это не отвечает на вопрос, почему по кнопку Cron в админке не запускается.

cron

Включаю подробное логирование в настройках Cron. Сохранить конфигурацию. И теперь в отчёте Администрирование → Отчёты → Последние записи журнала → Подробности явно отображается ошибка:

Попытка перезапуска выполнения регулярных процедур (cron) в то время, как они уже выполняются.

cron

Непонятно почему я тут Гость, ну да ладно. Теперь всё стало понятно. Cron в админке друпала не получается запустить, потому что он уже запущен. А за целую ночь Cron не смог проиндексировать сайт потому, что постоянно падает с ошибкой "Maximum execution time of 240 seconds".

Полечим.

Первое, исправим в \core\lib\Drupal\Core\Cron.php в функции "setTimeLimit(240)" на значение, которое у нас прописано в php.ini. По-моему, у меня там стоит 10 минут, правлю на 600. Это временное решение, после обновления ядра друпала все наши изменения пропадут.

Нам нужно уменьшить время выполнения задач. Администрирование → Конфигурация → Поиск и метаданные → Страницы поиска меняем количество пунктов, индексируемых за один запуск cron в меньшую стороны. Если вы используете другие расширения типа Search Api, то там тоже можно настраивать количество элементов, индексируемых за один раз.

cron

В админке можно настроить запуск Cron максимум раз в час, чаще не получается, поэтому, можно настроить внешний запуск Cron с помощью URL с той частотой, которая нам нужна. Но это уже другая история.

Теги

 

Похожие материалы

Обновление Drupal 9 в Windows с помощью Composer

Надоело мне вручную обновлять Drupal 9. Решил я это дело немного автоматизировать. Если Drupal на Linux, то удобно обновлять через Composer. А если на Windows, то... А что мешает нам поставить Composer в Windows?

Теги