Как оптимизировать cron.php
На моем сайте audioweb.ru крон играет очень важную роль и запускаться должен как можно чаще.
Я поставил запуск каждые 10 минут - часто все работает нормально, но 2-3 раза в сутки бывают проблемы:
Запускаемые по крону модули работают с внешними сайтами, иногда связь с ними может быть плохой и скрипт отключается по таймауту установленному в PHP.ini . Это нормальная ситуация, но крон портит все дело.
Он считает, что надо продолжать эту операцию целый час и выдает сообщение: "Время выполнения регулярных процедур превысило час, скорее всего это зависание". Целый час крон не работает, а выдает: "Попытка перезапуска выполнения регулярных процедур (cron) в то время, как они уже выполняются."
Работал ли кто-нибудь с кроном?
Можно как-то изменить настройки крона, чтобы он ждал не час, а меньшее время?
- Блог
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
Комментарии
Когда cron запускается, то Drupal устанавливает переменную "cron_semaphore" в текущее время для того, чтобы одновременно случайно не запустить два крона. Если вы уверены, что больше 5 минут у вас всё равно cron не будет работать, то можно попробовать поменять строчку 2507 в файле /includes/common.inc - функция drupal_cron_run :
<?php
// Release cron semaphore
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);
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-скрипта. Эта ошибка исчезнет, но я, естественно, не могу гарантировать, что не появятся другие
Спасибо!
Здорово помогло. Поставил семафор на 10 минут, а крон запускается каждые 6 минут. Если крон зависает, то после 1 пропуска запускается снова. Раньше на целый час отключался, в итоге в сутки 3-4 часа бездельничал.
На тестовом сервере 8 часов без проблем отработало, на основном теперь запустил.
Решение было сохранено на сайте DrupalCookBook.ru:
Оптимизация cron.php.
Авторы, предложившие решения, также указаны в сохранённой статье.