Быстрая диагностика зависания крона



Авторы решений:
Версия Drupal:

Задача

Определить причины зависания крона и устранить их.

Решение

Индексация

Уменьшите количество документов для индексирования за один запуск крона на стр. настройки поиска.
Лучше запускать крон несколько раз в день.

Рассылка

Если у вас стоит simple news то он может вызывать зависание при рассылке большого количества писем.

Не хватает времени

Попробуйте изменить файл cron.php следующим образом:

<?php
// If not in 'safe mode', increase the maximum execution time:
// if (!ini_get('safe_mode')) {
set_time_limit(1800);
// }
?>

т.е. закомментить эти строки.

Кто виноват?

Что бы выяснить какой модуль виноват в зависании крона сделайте следующее:
В файле includes/module.inc в самой последней функции function module_invoke_all() поменяйте строку 404-405

<?php
foreach (module_implements($hook) as $module) {
   
$function = $module .'_'. $hook;
?>

на
<?php
foreach (module_implements($hook) as $module) {
    if (
$hook == 'cron') {
   
watchdog('cron_runs', $module); }
   
$function = $module .'_'. $hook;
?>

Таким образом у вас появится новая категория "cron_runs" в журнале
В этой категории будет список модулей вызывавших крон.
Крайний последний модуль и будет виноват в его зависании.

После диагностики обязательно верните все файлы ядра в исходное состояние т.к. хакать ядро это как вступать в беспорядочные половые отношения.

Cообщения "Попытка перезапуска .... в то время как уже выполняется."

Вы еще можете получать сообщения "Попытка перезапуска .... в то время как уже выполняется."
Связано это с тем, что wget может запрашивать cron.php до 20 раз подряд если не получает вразумительного ответа.
http://drupal.org/node/150972

Еще бывает полезно закрыть доступ к крону "извне" таким вот образом:
В файле .htaccess пишем:

<Files "cron.php">
Order deny,allow
Allow from xxx.xxx.xxx.xxx
Deny from all
</Files>

Вместо xxx.xxx.xxx.xxx пишете IP с которого разрешаете запуск крона.

Использованные материалы

Быстрая диагностика зависания крона

Полезные ссылки

Creative Commons: ­Attribution-Share Alike 2.5

Данные материалы выложены под лицензией Creative Commons: ­Attribution-Share Alike 2.5. Это значит, что вы можете распространять, копировать и модифицировать эти произведения при условии упоминания авторства оригинала, и при условии, что они также будут распространяться на условиях этой лицензии (то есть, изменённую работу нельзя защитить копирайтом). Подробнее смотри: http://ru.wikipedia.org/wiki/Creative_Commons