Резюме
Сообщение об ошибке, которое вы видите, произойдет, если будут выполнены следующие два условия:
- Задания cron не завершаются (ошибка) или занимают более 4 минут;
- Вы вызываете cron чаще, чем каждые 4 минуты (согласно настройке crontab, а не настройке в Drupal)
Поэтому это сообщение об ошибке является признаком того, что задачи cron либо не выполняются, либо выполняются слишком долго. (Примечание: я понимаю, что вы уже нашли виновника, но я хотел бы добавить ответ для людей, которые находят эту страницу с помощью поиска, как и я)
Фон
Первое, что нужно понять, это то, как выполняются задачи Drupal cron. Cron Drupal вызывается через регулярные промежутки времени - либо через задание cron на вашем сервере, либо после каждой загрузки страницы, если вы используете cron для бедняка, который используется по умолчанию в Drupal.
Задачи cron не обязательно запускаются каждый раз, когда вызывается cron - в Drupal есть настройка (по умолчанию 3 часа), которая говорит, как часто следует запускать задачи cron. Но эта задержка в 3 часа применяется, только если задачи cron успешно завершены.
В Drupal 7, cron использует механизмы блокировки Drupal , которые предоставляют кооперативную, консультативную систему блокировки. Одной из особенностей этой системы блокировки является то, что срок действия блокировки истекает через определенное время. В случае cron срок его действия истекает через 4 минуты - поэтому, если ваш cron вызывается каждые 3 минуты, а предыдущее задание cron не было выполнено к этому времени (либо оно падало, либо было очень медленным), вы действительно получили бы это сообщение об ошибке. ,
Тот факт, что вы устанавливаете cron каждые 12 часов, не имеет значения - поскольку задача cron в Drupal терпит неудачу / занимает слишком много времени, Drupal предполагает, что она не была запущена, поэтому пытается запустить ее снова, как только cron будет вызван. Двенадцатичасовая задержка относится только к успешным заездам.
Переменная семафора cron больше не существует в Drupal 7 - это было для более старой версии Drupal. В Drupal 7 нет надежного способа снять блокировку вручную, потому что бэкэнд блокировки может измениться - однако, если вы используете механизм блокировки ядра, вы можете снять блокировки cron, отредактировав базу данных:
DELETE FROM semaphore WHERE name = 'cron';
Но, делая это, вы только исправляете симптомы - проблема, требующая решения, заключается в том, почему cron терпит неудачу / требует так много времени для запуска.