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

Настройка cron в Drupal

Drupal 9

Заметил, что сайт на Drupal 9 начал сильно тормозить. Вот только что нормально работал, а тут тормоза.

Смотрю логи, а там дичь:

drupal

Всё забито сообщениями:

Attempting to re-run cron while it is already running.

Администрирование → Конфигурация → Система → Cron. Здесь можно посмотреть текущие настройки cron.

Для нормальной работы Drupal нужно периодически выполнять системные задачи. Чистить кэш, отправлять письма, проверять обновления, индексировать статьи. По умолчанию Drupal это делает автоматически, просто в какой-то момент наступает период запуска скрипта, и любой хит на сайте его выполняет. Можем выполнять задачи cron:

  • 1 раз в час
  • Каждые 3 часа
  • Каждые 6 часов
  • Каждые 12 часов
  • Раз в день
  • Раз в неделю

У меня стоял запуск каждый час. Видимо, накопилась какая-то большая пачка задач, которая выполнялась дольше часа, после этого каждый хит стал пытаться выполнить cron и перегрузил сайт. Можно увеличить срок но есть и другой способ. Можно снять эту непосильную нагрузку с плеч пользователей и перенести запуск задач cron на ваш сервер. Для этого Drupal генерирует специальную уникальную ссылку, если на неё зайти, то запустится выполнение cron.

drupal

Указываю, чтобы Drupal никогда не запускал cron и дёргаю URL через Task Scheduler с нужным мне расписанием:

Дёргаем URL в Планировщике заданий

Удобно то, что ссылку можно открывать с любого удобного вам сервера или компьютера. Если у вас Linux, то автоматизировать можно через crontab:

0 * * * * wget -O - -q -t 1 http://CRON_URL

Cron — планировщик заданий в Linux

wget:

wget -O - -q -t 1 https://example.com/cron/Fe0lip-huaTyeUBYlCXbsc-QI-dw > /dev/null 2>&1

Если вы запускаете задачу на том же сервере, на котором работает Drupal, можно воспользоваться Drupal Console:

30 * * * * /var/www/html/vendor/bin/drupal --root=/var/www/html/docroot cron:execute > /dev/null 2>&1

PHP:

/usr/bin/php /home/sites/example.com/public_html/cron.php

Браузером:

45 * * * * /usr/bin/lynx -source http://example.com/cron.php

Скриптом:

45 * * * * /home/www/drupal/scripts/cron-lynx.sh
45 * * * * /home/www/drupal/scripts/cron-curl.sh

Больше вариантов запуска заданий cron можно найти в документации: cPanel, Drush, мультисайт и прочие:

https://www.drupal.org/docs/administering-a-drupal-site/cron-automated-tasks

Дополнительно

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

Теги

 

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

Drupal 9 — добавляем свой логотип на ссылки в Telegram и Яндекс Дзен

При отправке ссылки Telegram считывает метатеги на указанном URL, кеширует их и выводит на экран красивым блоком. Добавим в этот блок свой логотип.

Теги