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