cron + drupal

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

Аватар пользователя pio pio 27 апреля 2011 в 1:28

Вечер добрый!

есть свой php скрипт, который, по сути, - icq бот, где подключаю <?php require_once DRUPAL_ROOT '/includes/bootstrap.inc'?> и пользуюсь функциями drupal для работы с БД. его задача сделать выборку из БД в соответсвии с определенными условиями, сформировать сообщения и разослать в аськи нескольким группам пользователей. (1 группа - сообщение #1, 2я группа - сообщение #2, и т.д.) при рассылке сообщений срабатывают несколько счетчиков для подсчета результатов деятельности.

положил этот скрипт в корень сайта (public_html) и обращаюсь к скрипту хттп запросом напрямую: http://site.ru/icq.php

что интересно, cms сообщает, что страница не найдена, но, тем не менее скрипт свою задачу выполняет корректно: сообщения рассылаются ровно такие и в том кол-ве, как и должно быть. по завершению работы скрипта, записывается корректный отчет в бд, как и задумано.

первый вопрос: как такое может быть?

далее второй и главный вопрос: как заставить этот скрипт выполняться кроном? если при том, что непосредственно в CPanel задание вида  /usr/bin/php -f /home/gameremi/public_html/icq.php возвращает следующие ошибки:

 Notice: Undefined index: SCRIPT_NAME in /home/gameremi/public_html/includes/bootstrap.inc on line 1523
 
Notice: Undefined index: REMOTE_ADDR in /home/gameremi/public_html/includes/bootstrap.inc on line 2597
 
Notice: Trying to get property of non-object in /home/gameremi/public_html/modules/dblog/dblog.module on line 144
 
PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'uid' cannot be null: INSERT INTO {watchdog} (uid, type, message, variables, severity, link, location, referer, hostname, timestamp) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6, :db_insert_placeholder_7, :db_insert_placeholder_8, :db_insert_placeholder_9); Array ( [:db_insert_placeholder_0] => [:db_insert_placeholder_1] => php [:db_insert_placeholder_2] => %type: !message in %function (line %line of %file). [:db_insert_placeholder_3] => a:6:{s:5:"%type";s:6:"Notice";s:8:"!message";s:29:"Undefined index: REMOTE_ADDR";s:9:"%function";s:12:"ip_address()";s:5:"%file";s:49:"/home/gameremi/public_html/includes/bootstrap.inc";s:5:"%line";i:2597;s:14:"severity_level";i:5;} [:db_insert_placeholder_4] => 5 [:db_insert_placeholder_5] => [:db_insert_placeholder_6] => http:///?/home/gameremi/public_html/icq.php [:db_insert_placeholder_7] => [:db_insert_placeholder_8] => [:db_insert_placeholder_9] => 1303832462 ) in dblog_watchdog() (line 155 of /home/gameremi/public_html/modules/dblog/dblog.module).

резюме: скрипт работает и работает корректно, но cron возвращает ошибки.

в чем тут может быть, по Вашему мнению, проблема?

Комментарии

Аватар пользователя pio pio 28 апреля 2011 в 23:07

MaNaX wrote:
оформи скипт в виде модуля и крон привяжешь к пути сата - ошибки должны пропасть.

если не затруднит, дайте пару ссылок с примерами оформления скрипта в виде модуля. либо с поиском что-то, либо со мной, но запрос "как оформить скрипт в виде модуля drupal" выдает по большей части интернет-магазины и др. бесполезное для меня.

заранее спасибо

Аватар пользователя r0mik r0mik 27 апреля 2011 в 12:58

в том, что cli-версия не устанавливает переменных окружения которые нужны друпал. написать в начале скрипта подобное -

$_SERVER['HTTP_HOST'] = 'site.ru';
$_SERVER['REMOTE_ADDR'] = '127.0.0.1';
$_SERVER['REQUEST_METHOD'] = 'GET';
$_SERVER['SERVER_SOFTWARE'] = 'apache/2.2.1';

chdir('/home/gameremi/public_html');

Аватар пользователя pio pio 27 апреля 2011 в 16:40

r0mik wrote:
в том, что cli-версия не устанавливает переменных окружения которые нужны друпал. написать в начале скрипта подобное -

$_SERVER['HTTP_HOST'] = 'site.ru';
$_SERVER['REMOTE_ADDR'] = '127.0.0.1';
$_SERVER['REQUEST_METHOD'] = 'GET';
$_SERVER['SERVER_SOFTWARE'] = 'apache/2.2.1';

chdir('/home/gameremi/public_html');

спасибо за совет, вроде продвигается дело. ошибки изчезли.

Аватар пользователя KibeR_ShuriK KibeR_ShuriK 21 октября 2011 в 6:24

pio wrote:
r0mik wrote:
в том, что cli-версия не устанавливает переменных окружения которые нужны друпал. написать в начале скрипта подобное -

$_SERVER['HTTP_HOST'] = 'site.ru';
$_SERVER['REMOTE_ADDR'] = '127.0.0.1';
$_SERVER['REQUEST_METHOD'] = 'GET';
$_SERVER['SERVER_SOFTWARE'] = 'apache/2.2.1';

chdir('/home/gameremi/public_html');

спасибо за совет, вроде продвигается дело. ошибки изчезли.

Это не решение, а костыль. Сейчас предупреждения исчезли, а потом проблемы всплыть могут в неожиданном месте.

SCRIPT_NAME надо заменить на SCRIPT_FILENAME
В конфигурации сервера добавить передачу параметра REMOTE_ADDR компилятору PHP.

Вот пример рабочей конфигурации, где nginx работает через php-fpm и передает те самые переменные окружения _SERVER:

location ~\.php$ {
  fastcgi_pass   unix:/var/sockets/php-fpm.sock;
  fastcgi_index  index.php;
 
  fastcgi_param  SCRIPT_FILENAME  /var/www/site$fastcgi_script_name;
  fastcgi_param  QUERY_STRING     $query_string;
  fastcgi_param  REQUEST_METHOD   $request_method;
  fastcgi_param  CONTENT_TYPE     $content_type;
  fastcgi_param  CONTENT_LENGTH   $content_length;
  fastcgi_param  REMOTE_ADDR      $remote_addr;
}