Заметил, что сайт на Drupal 9 начал сильно тормозить. Вот только что нормально работал, а тут тормоза.
Смотрю логи, а там дичь:
Всё забито сообщениями:
Attempting to re-run cron while it is already running.
Администрирование → Конфигурация → Система → Cron. Здесь можно посмотреть текущие настройки cron.
Для нормальной работы Drupal нужно периодически выполнять системные задачи. Чистить кэш, отправлять письма, проверять обновления, индексировать статьи. По умолчанию Drupal это делает автоматически, просто в какой-то момент наступает период запуска скрипта, и любой хит на сайте его выполняет. Можем выполнять задачи cron:
- 1 раз в час
- Каждые 3 часа
- Каждые 6 часов
- Каждые 12 часов
- Раз в день
- Раз в неделю
У меня стоял запуск каждый час. Видимо, накопилась какая-то большая пачка задач, которая выполнялась дольше часа, после этого каждый хит стал пытаться выполнить cron и перегрузил сайт. Можно увеличить срок но есть и другой способ. Можно снять эту непосильную нагрузку с плеч пользователей и перенести запуск задач cron на ваш сервер. Для этого Drupal генерирует специальную уникальную ссылку, если на неё зайти, то запустится выполнение cron.
Указываю, чтобы 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