Решение
По крону в Drupal выполняются например такие задачи, как индексация контента для работы поиска, отправка писем подписчикам и пр. функции - модули сами могут давать задания для выполнения по расписанию.
Запускаются задания вызовом cron.php лежащего в корне сайта. Поэтому надо прописать его вызов в crontab с периодичностью зависящей от посещаемости сайта - где-нибудь от 30 мин до 1.5-2 часов.
Варианты
- Вручную.
- Из OS сервера.
- Через панель управления хостингом.
- С помощью дополнительных модулей Drupal.
- С помощью внешних сервисов.
- Вызов cron.php своего сайта с другого хостинга, на котором доступен crontab..
Вручную
(Откроется пустая страница. В случае успешного выполнения, в логах останется сообщение)
Друпал 6: admin/reports/status/run-cron
После выполнения откроется страница "Отчет о состоянии" (admin/reports/status) с сообщение о том, как была выполнена эта команда.
Друпал 5: admin/logs/status/run-cron
После выполнения откроется страница "Отчет о состоянии" (admin/reports/status) с сообщение о том, как была выполнена эта команда.
Из OS сервера
Unix
Необходимо создать файл .crontab, в домашнем каталоге и занести строчку, которая будет содержать время и имя скрипта.
Формат команд в Википедии.
Windows
Запуск cron.php в Windows - инструкция с картинками.
Через панель управления хостингом
Варианты команд запуска скрипта cron.php
- Через lynx или wget
- Через /usr/local/bin/php
Сначала нужно выяснить, имеется ли в наличии команда и путь к ней:
which lynx
which wget
Через lynx или wget
Вызывать cron.php удобно например через lynx или wget.
Готовый shell-скрипт делающий это лежит в scripts/cron-lynx.sh. Там надо только поправить имя хоста (но не указывать localhost, указать его так же как к сайту обращаются из веба).
Файл скрипта должен быть исполняемым хотя бы для владельца.
Пример (запуск cron.php каждый час):
0 * * * * /usr/bin/lynx -source http://www.ВашСайт.ru/cron.php > /dev/null 2>&1
перед тем, как записывать эти команды себе в crontab, проверьте, что программа (
wget или lynx) находится в /usr/bin. Это может быть не так! Для проверки пути wget запустите whereis wget - будет выведен список файлов, содержащих слово wget.
Опция -q при дёрганьи wget'ом точно должа помочь. У самого была такая проблема, оказалось, что это фича wget. Он просто сохраняет страницу, которую выгреб, а если страница с данным именем уже существует, приплючоввывает счетчик в конец. Посему, как и сказал товарищ Dan, используйте -q в параметрах wget
На половине хостингов катит так (запуск cron.php каждый час, на 38 минуте):
38 * * * * lynx -source http://www.example.com/cron.php > /dev/null 2>&1
Как запускать cron.php каждый день в час дня и час ночи?
Применение утилиты wget без параметров (по умолчанию) означает: количество попыток загрузки 20, а длительность каждой попытки 900 сек. (15 мин.) !!! Довольно длительное "зависание" может получится (5 часов)...
Команда "wget -O - " означает (в том числе) запуск утилиты wget только один раз.
curl:
Командой: /usr/local/bin/php /home/example.com/cron.php
В этом случае в cron.php включение файлов нужно делать не по относительному пути, а по абсолютному. Вот как должен выглядеть cron.php:
// $Id: cron.php,v 1.36 2006/08/09 07:42:55 dries Exp $
/**
* @file
* Handles incoming requests to fire off regularly-scheduled tasks (cron jobs).
*/
$_SERVER['HTTP_HOST'] = 'example.com';
$_SERVER['REMOTE_ADDR'] = '127.0.0.1';
$_SERVER['REQUEST_METHOD'] = 'GET';
chdir('/home/example.com/public_html');
include_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
flashvideo_cron();
/*
$users = db_query('SELECT * FROM {users}');
while($user = db_fetch_array($users)) {
echo $user['name'] . '\n';
}
echo 'all';
*/
С помощью дополнительных модулей Drupal
Если crontab на хостинге не доступен, есть модуль poormanscron. С ним Drupal работает также как большинство CMS - грузит задания планировщика при вызове страниц пользователями.
Poormanscron позволяет при каждом открытии страницы сравнивать дату предыдущего срабатывания cron. Если она больше указанного промежутка времени запустит на выполнение cron.
С помощью внешних сервисов
Существуют специальные сайты, которые позволяют настроить запуск cron на вашем сайте:
- Web-cron.ru представляет собой сервис, предназначенный для регулярного запуска крона на Ваших drupal-сайтах. Он полностью заменяет стандартный crontab, который зачастую используют на сервере. Помимо этого, данный сайт можно использовать для выполнения скриптов и програм в Ваших веб-проектах. Запуск осуществляется с определенной периодичностью, или по-расписанию. Кроме запуска по расписанию, имеется возможность отслеживать время отклика Ваших заданий (пинг сайтов).
- www.webcron.org - на француском,
- cron-server.de - на немецком.
- cronjob.ru - русскоязычный сервис.
Использованные материалы:
Полезные ссылки:
- Cron - статья в Википедии.
- Полезные советы по Linux: Планирование задач с помощью cron и at
- Работа по расписанию во FreeBSD (cron crontab)
- Как заставить cron выполнять наши приказания
- Cron Job configuration line by line [drupal.org]
- мануал по wget на www.opennet.ru.
- Cron — запуск программ пользователя в указанное время












Комментарии
Здравствуйте,
У меня cron.php не работает с кронтабом. Когда ввожу вручную например: http://www.vitalmlm.com/mailtux/adm/cron.php выдает сообщение --> Can't update Cache! Time Start Function: 2009-02-10 03:28:57 Time End Function: 2009-02-10 03:30:47 End... а когда крон отпавляет на cron.log свое сообщение выдается Wrong Licence!End... ЧТО МОЖНО СДЕЛАТЬ?
Вы все напутали. Прочитайте ещё раз статью внимательно.
В кронтабе прописывается не путь к cron.php на веб-сервере, а в путь в файловой системе.
В Drupal5 для запуска cron командой листинг кода не верный. Вместо flashvideo_cron(); (что это вообще? :)) необходимо выполнять drupal_cron_run(); да и каменты можно было бы удалить (ПМСМ).
С уважением!
Здраствуйте !!!
Столкнулся с такой проблемой ...
Всем пользователям на мыло шлётся сообщение с таким содержанием :
Warning: include_once(): Filename cannot be empty in /sata1/home/users/ahava/www/www.ahava.com.ua/cron.php on line 9
Warning: include_once(): Failed opening '' for inclusion (include_path='.:/usr/local/share/pear') in /sata1/home/users/ahava/www/www.ahava.com.ua/cron.php on line 9
Fatal error: Call to undefined function drupal_bootstrap() in /sata1/home/users/ahava/www/www.ahava.com.ua/cron.php on line 10
Голову уже сломал ... Не могли бы Вы помочь каким-то советом !!!
Нужно прочитать внимательно сообщение об ошибке и принять меры.
1. Открыть ваш файл cron.php и посмотреть какой файл инклюдится в 9й строке.
2. Проверить наличие этого файла (РНР жалуется, что файл пустой)
3. Отключить вывод предупреждений в php и в друпал
Вызывается функция, которая не определена - function drupal_bootstrap() скорее всего не закачался какой-то файл ядра, содержащий эту функцию.
Короче говоря, ищите файлы с нулевой длинной и закачивайте их заново на сервер.
К крону эта ошибка не имеет никакого отношения.
С помощью внешних сервисов:
http://cronjob.ru/ - еще один сервис...
Добавил cronjob.ru к списку сервисов.