Боремся с кроном

Главные вкладки

Аватар пользователя Stalker-g2 Stalker-g2 26 мая 2008 в 11:28

Как известно, крон в друпале по дефолту запускается только через браузер. Это неправильно(паразитные соединения с вёб-сервером) и часто неудобно.

Например, я использую flashvideo для автоматической генерации flv и 3gp из avi. Если роликов было закачано много - процесс занимает длительное время, а разрешать скриптам выполняться по 6 минут через вёб-сервер - это значит сделать подарок DDoS-ерам. Поэтому можно взять, да и пропатчить файл стандартного крона так, чтобы его можно было выполнить через:
/usr/local/bin/php usr/home/www.test.ru/cron.php

Вот, собственно, что надо изменить, чтобы всё работало как надо.

<?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';
*/

оригинал

Комментарии

Аватар пользователя VladSavitsky VladSavitsky 28 мая 2008 в 1:04

PoorMansCron - это крон для бедных! Хотя с горя поставил уже и его...
Мне хостер тоже сказал, что для такого запуска нужно абсолютные пути в скрипте использовать...

Drupal CookBook - Готовить может каждый!Решение было сохранено на сайте DrupalCookBook.ru:

Запуск хронометра (cron).

Авторы, предложившие решения, также указаны в сохранённой статье.

Аватар пользователя EllECTRONC EllECTRONC 29 мая 2008 в 5:04

VladSavitsky wrote:
PoorMansCron - это крон для бедных! Хотя с горя поставил уже и его...

Вот!
А что делать, если некогда?..... да и к тому же меня устраивает запуск крона через часов 10...

Аватар пользователя fasdalf@fasdalf.ru fasdalf@fasdalf.ru 28 мая 2008 в 8:14

А если это мультисайт, тогда, что по одному 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');?>

Аватар пользователя Stalker-g2 Stalker-g2 28 мая 2008 в 15:59

<a href="mailto:fasdalf@fasdalf.ru">fasdalf@fasdalf.ru</a> wrote:
А если это мультисайт, тогда, что по одному 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');?>


правильно
однако в целом я предпочитаю другой подход - я обычный крон запускаю по стандарту, а громоздкие задачи выношу в отдельные скрипты

Аватар пользователя Stalker-g2 Stalker-g2 28 мая 2008 в 11:23

Автозапуск крона не поможет, если через крон у вас по полчаса видео конвертируется)))
крон для бедных тут тоже не вариант

Аватар пользователя VladSavitsky VladSavitsky 28 мая 2008 в 12:06

У меня cron.php запускается так:
/home/........./scripts/cron-curl.sh
На скрипт нужно было выставить право исполнения для владельца и внутри изменить доменное имя.
Может быть вам поможет.

Аватар пользователя CTPAHHuK CTPAHHuK 2 июля 2009 в 10:51

Коллеги, доброго времени суток!
При запуске cron.php через php возникла следующая проблема:
В письмах приходящих по подписке приходят битые ссылки.
Ссылки выглядят как
http://mydomain.ru/home/www/mydomain.ru/public_html/weblinks/49350
Где /home/www/mydomain.ru/public_html/ - хоумдира сайта.
Где грабли?

Аватар пользователя Andruxa Andruxa 10 ноября 2010 в 14:15

Здравствуйте.

Подскажите, пожалуйста - есть 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"

В чем может быть проблема?