Быстрая диагностика зависания крона
Прислано: seaji
чт, 29/11/2007 - 22:08
Постоянно сталкивался с зависанием крона (http://drupal.ru/node/2293#comment-60504)
Вот некоторые рецепты.
Индексация
Уменьшите количество документов для индексирования за один запуск крона на стр. настройки поиска.
Лучше запускать крон несколько раз в день.
Рассылка
Если у вас стоит 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" в журнале
В этой категории будет список модулей вызывавших крон.
Крайний последний модуль и будет виноват в его зависании.
После диагностики обязательно верните все файлы ядра в исходное состояние т.к. хакать ядро это как вступать в беспорядочные половые отношения.
- seaji's blog
- Для комментирования войдите или зарегистрируйтесь
Супер. В закладки.
- Для комментирования войдите или зарегистрируйтесь
Да, чуть не забыл.
Вы еще можете получать такое сообщение как у меня "Попытка перезапуска .... в то время как уже выполняется."
С чем это связано?
А связано это с тем, что 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 с которого разрешаете запуск крона.
- Для комментирования войдите или зарегистрируйтесь
Во, получил результаты, любуйтесь:
- Для комментирования войдите или зарегистрируйтесь
респект!
решил глянуть, что у меня с кроном происходит и оказалось, что уже 3-й день на одном из сайтов не выполняется в полном объеме...
благодаря предложеному решению выяснил, что модуль update_status ведет себя не вполне корректно.
отключил, буду разбираться.
- Для комментирования войдите или зарегистрируйтесь
спасибо
- Для комментирования войдите или зарегистрируйтесь
Решение было сохранено на сайте DrupalCookBook.ru:
Быстрая диагностика зависания крона.
Авторы, предложившие решения, также указаны в сохранённой статье.
- Для комментирования войдите или зарегистрируйтесь
спасибо, надо модуль написать
- Для комментирования войдите или зарегистрируйтесь
наверно полезно.
- Для комментирования войдите или зарегистрируйтесь
Спасибо, помогло!
- Для комментирования войдите или зарегистрируйтесь
Спасибо! Нашел кто виноват, это модуль search, только что с ним теперь делать, как то сайт без поиска - грустно! Уменьшал кол-во индексируемых строк, ничего, зависает. Что скажете?
- Для комментирования войдите или зарегистрируйтесь
И у меня поиск вызывает зависание. Как только его отключаю, то крон выпоняется быстро. Поставила поиск Гугла, но он мне не совсем нравится - находит кучу ненужных страниц, где нужные теряются в общей массе. Да и почему-то при включеном гугловском поиске сайт начал подтормаживать.
- Для комментирования войдите или зарегистрируйтесь
Посмотрите nid последнего индексированного материала. Потом откройте эту страницу и посмотрите в исходный код текста. У меня поиск зависал если в тексте были вордовские спец-теги, когда я копировал и вставлял из ворда.
- Для комментирования войдите или зарегистрируйтесь
Сейчас задам глупый вопрос. А как посмотреть, какой был последний? Я облазила всю базу и не нашла... Хотя у меня такое ощущение, что просто база стала тяжелая для этого модуля - крон не просто зависает, а "кладет" сайт.
- Для комментирования войдите или зарегистрируйтесь
переменная node_cron_last в таблице variable
а вообще Вам стоит произвести поиск по всей базе данных по условию LIKE %cron%
- Для комментирования войдите или зарегистрируйтесь
Спасибо большое за ответ. Переменную я нашла. Все нормально. Но "родной" поиск убрала. Он давно уже не справляется с базой. Поставила Яндекс. Его выборка мне больше понравилась, чем гугловская - находит четко нужные страницы без лишнего мусора. А вот поиск у Гугла слишком уж подробный - находит все страницы, где упоминается нужное слово (даже в перекрестных ссылках), поэтому нужные страницы как-то теряются в этом объеме данных.
Но эксперимент продолжается...
- Для комментирования войдите или зарегистрируйтесь









Комментарии