Как оптимизировать cron.php

3 апреля 2008 в 16:30
Аватар пользователя zzia zzia 0 3

На моем сайте audioweb.ru крон играет очень важную роль и запускаться должен как можно чаще.
Я поставил запуск каждые 10 минут - часто все работает нормально, но 2-3 раза в сутки бывают проблемы:

Запускаемые по крону модули работают с внешними сайтами, иногда связь с ними может быть плохой и скрипт отключается по таймауту установленному в PHP.ini . Это нормальная ситуация, но крон портит все дело.
Он считает, что надо продолжать эту операцию целый час и выдает сообщение: "Время выполнения регулярных процедур превысило час, скорее всего это зависание". Целый час крон не работает, а выдает: "Попытка перезапуска выполнения регулярных процедур (cron) в то время, как они уже выполняются."

Работал ли кто-нибудь с кроном?
Можно как-то изменить настройки крона, чтобы он ждал не час, а меньшее время?

Комментарии

Когда cron запускается, то Drupal устанавливает переменную "cron_semaphore" в текущее время для того, чтобы одновременно случайно не запустить два крона. Если вы уверены, что больше 5 минут у вас всё равно cron не будет работать, то можно попробовать поменять строчку 2507 в файле /includes/common.inc - функция drupal_cron_run :

<?php
  
if ($semaphore) {
    if (
time() - $semaphore 3600) {
      
// Either cron has been running for more than an hour or the semaphore
      // was not reset due to a database error.
      
watchdog('cron''Cron has been running for more than an hour and is most likely stuck.', array(), WATCHDOG_ERROR);

      

// Release cron semaphore
      
variable_del('cron_semaphore');
    }
    else {
      
// Cron is still running normally.
      
watchdog('cron''Attempting to re-run cron while it is already running.', array(), WATCHDOG_WARNING);
    }
  }
?>

Попробуйте поменять в строке 2507 число 3600 на максимальное время (в секундах) работы вашего cron-скрипта. Эта ошибка исчезнет, но я, естественно, не могу гарантировать, что не появятся другие Smile

3 апреля 2008 в 22:49

Спасибо!
Здорово помогло. Поставил семафор на 10 минут, а крон запускается каждые 6 минут. Если крон зависает, то после 1 пропуска запускается снова. Раньше на целый час отключался, в итоге в сутки 3-4 часа бездельничал.

На тестовом сервере 8 часов без проблем отработало, на основном теперь запустил.

4 апреля 2008 в 15:47