Как известно, крон в друпале по дефолту запускается только через браузер. Это неправильно(паразитные соединения с вёб-сервером) и часто неудобно.
Например, я использую flashvideo для автоматической генерации flv и 3gp из avi. Если роликов было закачано много - процесс занимает длительное время, а разрешать скриптам выполняться по 6 минут через вёб-сервер - это значит сделать подарок DDoS-ерам. Поэтому можно взять, да и пропатчить файл стандартного крона так, чтобы его можно было выполнить через:
/usr/local/bin/php usr/home/www.test.ru/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'] = 'test.ru';
$_SERVER['REMOTE_ADDR'] = '127.0.0.1';
$_SERVER['REQUEST_METHOD'] = 'GET';
chdir('/home/www.zaposti.ru/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';
*/
Комментарии
Ну, ни фига себе! Есть же модуль авто-запуска крона через определенный интервал!
PoorMansCron - Бедный Крон!
Хотя ход интересный!
PoorMansCron - это крон для бедных! Хотя с горя поставил уже и его...
Мне хостер тоже сказал, что для такого запуска нужно абсолютные пути в скрипте использовать...
Решение было сохранено на сайте DrupalCookBook.ru:
Запуск хронометра (cron).
Авторы, предложившие решения, также указаны в сохранённой статье.
Вот!
А что делать, если некогда?..... да и к тому же меня устраивает запуск крона через часов 10...
[дубля]
А если это мультисайт, тогда, что по одному cron.php на каждый url делать?
zaposti.cron.php
<?php $_SERVER['HTTP_HOST'] = 'zaposti.ru';
$_SERVER['REMOTE_ADDR'] = '127.0.0.1';
$_SERVER['REQUEST_METHOD'] = 'GET';
reqiure('usr/home/www.zaposti.ru/cron.php');?>
vezidko.cron.php
<?php $_SERVER['HTTP_HOST'] = 'vezidko.ru';
$_SERVER['REMOTE_ADDR'] = '127.0.0.1';
$_SERVER['REQUEST_METHOD'] = 'GET';
reqiure('usr/home/www.vezidko.ru/cron.php');?>
правильно
однако в целом я предпочитаю другой подход - я обычный крон запускаю по стандарту, а громоздкие задачи выношу в отдельные скрипты
Автозапуск крона не поможет, если через крон у вас по полчаса видео конвертируется)))
крон для бедных тут тоже не вариант
У меня cron.php запускается так:
/home/........./scripts/cron-curl.sh
На скрипт нужно было выставить право исполнения для владельца и внутри изменить доменное имя.
Может быть вам поможет.
Коллеги, доброго времени суток!
При запуске cron.php через php возникла следующая проблема:
В письмах приходящих по подписке приходят битые ссылки.
Ссылки выглядят как
http://mydomain.ru/home/www/mydomain.ru/public_html/weblinks/49350
Где /home/www/mydomain.ru/public_html/ - хоумдира сайта.
Где грабли?
Здравствуйте.
Подскажите, пожалуйста - есть 2 сайта на одном шаред-хостинеге (не мультисайтинг - разные БД, директории, наборы модулей и т.д.)
Дописал в начале cron.php для каждого сайта
<?php
$_SERVER['HTTP_HOST'] = 'site1.ru';
$_SERVER['REMOTE_ADDR'] = '127.0.0.1';
$_SERVER['REQUEST_METHOD'] = 'GET';
chdir('/home/userXXX/data/www/site1.ru');
?>
и
<?php
$_SERVER['HTTP_HOST'] = 'site2.ru';
$_SERVER['REMOTE_ADDR'] = '127.0.0.1';
$_SERVER['REQUEST_METHOD'] = 'GET';
chdir('/home/userXXX/data/www/site2.ru');
?>
соответственно.
С одним сайтом все в порядке - крон регулярно выполняется, со вторым - проблема: приходит сообщение на почту
"PHP Notice: Undefined index: SERVER_SOFTWARE in /home/userXXX/data/www/site2.ru/includes/bootstrap.inc on line 660"
В чем может быть проблема?