Выполнение действий по cron-у

Обсуждение документации. Переводы Cookbook и авторские рецепты.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Выполнение действий по cron-у

Сообщение samdark »

Написал новый рецепт, рассказывающий о выполнении действий по cron-у.

http://yiiframework.ru/doc/cookbook/ru/install.cron
Аватара пользователя
Faenir
Сообщения: 292
Зарегистрирован: 2010.01.06, 01:46
Откуда: Симферополь

Re: Выполнение действий по cron-у

Сообщение Faenir »

Здравствуйте, Александр.
Прежде всего, хочу поблагодарить вас за ваш труд. Сайт просто замечательный! Столько полезной информации по yii на русском языке... спасибо!
Данный способ имеет большой минус: если по крону выполняются достаточно затратные действия, кто угодно при знании URL сможет сильно нагрузить сервер.
А если сделать просто проверку по ip-адресу в коде? Например разрешить выполнение скрипта только с айпи сервера на котором работает крон?
Nafania
Сообщения: 1227
Зарегистрирован: 2011.01.31, 13:12

Re: Выполнение действий по cron-у

Сообщение Nafania »

Еще есть runactions.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Выполнение действий по cron-у

Сообщение samdark »

Ну, можно, конечно. Вот только есть ли смысл?
Аватара пользователя
Faenir
Сообщения: 292
Зарегистрирован: 2010.01.06, 01:46
Откуда: Симферополь

Re: Выполнение действий по cron-у

Сообщение Faenir »

Ну просто, в таком случае, данный способ не имеет большого минуса, который описан рецепте:)
Данный способ имеет большой минус: если по крону выполняются достаточно затратные действия, кто угодно при знании URL сможет сильно нагрузить сервер.
Dismal
Сообщения: 247
Зарегистрирован: 2011.10.16, 13:25

Re: Выполнение действий по cron-у

Сообщение Dismal »

Следуя рецепту, получаю следующее: "CHttpRequest is unable to determine the request URI."
Я правильно понимаю, что статья устарела и нужно использовать yiic для команд cron?
esche
Сообщения: 1054
Зарегистрирован: 2010.11.24, 03:39

Re: Выполнение действий по cron-у

Сообщение esche »

Dismal писал(а):Следуя рецепту, получаю следующее: "CHttpRequest is unable to determine the request URI."
Я правильно понимаю, что статья устарела и нужно использовать yiic для команд cron?
Статья будет актуальна ещё долго.. по крайней мере в части получения через HTTP (оно не только для Yii работает)
Насчёт URI - там вроде как написано
...существующий метод контроллера..
...
Dismal
Сообщения: 247
Зарегистрирован: 2011.10.16, 13:25

Re: Выполнение действий по cron-у

Сообщение Dismal »

esche писал(а):...существующий метод контроллера..
Существующий метод контроллера - эмуляция браузера, все верно.
Но ниже: Использование консольного приложения, подключается файл yii.php, а не yiic
Возможно, опечатка в статье?
331520
Сообщения: 7
Зарегистрирован: 2011.04.20, 15:19

Re: Выполнение действий по cron-у

Сообщение 331520 »

Читал, много думал. РезумЭ: Для создания консольного приложения всё расписано чётко. Во всяком случае у меня всё заработало.
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: Выполнение действий по cron-у

Сообщение yiijeka »

@331520
Здорово, если так.
Резюме: Поздравляю вас с третьим сообщением. Видно хорошо думали и много читали ))))
OKyJIucT
Сообщения: 33
Зарегистрирован: 2013.06.24, 14:31

Re: Выполнение действий по cron-у

Сообщение OKyJIucT »

Ошибки нет в рецепте? Я заметил, что сначала написано
Создаем файл protected/cron.php
А потом
Копируем файл конфигурации protected/config/console.php в protected/config/cron.php
Если в первом и втором случае файлы разные, то следует также указать, что protected/config/cron.php также необходимо создать, потому что у меня по умолчанию такого файла нет
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: Выполнение действий по cron-у

Сообщение futbolim »

2 вариант.
и там console.php кажись
OKyJIucT
Сообщения: 33
Зарегистрирован: 2013.06.24, 14:31

Re: Выполнение действий по cron-у

Сообщение OKyJIucT »

В общем, сделал я следующим образом:

1. Создал файл в папке protected - cron.php и добавил в него следующее

Код: Выделить всё

<?php

$yiic=dirname(__FILE__).'/../framework/yiic.php';
$config=dirname(__FILE__).'/config/cron.php';

require_once($yiic); 
Создал файл protected/config/cron.php и скопировал в него настройки из protected/config/console.php, единственное, изменил данные для подключения к БД и прописал дополнительный компонент

Код: Выделить всё

'mailer' => array(
            'class' => 'application.extensions.mailer.EMailer',
            'pathViews' => 'application.views.email',
            'pathLayouts' => 'application.views.email.layouts'
        ), 
Само собой, создал /protected/commands/TestCommand.php и добавил туда свою команду

запускаю через SSH команду

Код: Выделить всё

php /path/to/cron.php test
где указываю полный путь к cron.php, в результате мне ругается SSH на то, что не подключены различные контроллеры. Я думал, они автоматом подключатся, но команды типа

Код: Выделить всё

Turn::model()->findByAttributes(array('screen_name' => $itemTurn['screen_name'])); 
выдают ошибку

Код: Выделить всё

PHP Error[2]: include(Turn.php): failed to open stream: No such file or directory
    in file /var/www/user/data/www/site.ru/framework/YiiBase.php at line 421
Я уже вручную инклудил все контроллеры, но почему то когда подключаю все, которые требуются, ругается уже на

Код: Выделить всё

PHP Error[2]: include(Controller.php): failed to open stream: No such file or directory
    in file /var/www/user/data/www/site.ru/framework/YiiBase.php at line 421
Подскажите, что я сделал не так?

Так же пробовал обращаться для запуска команды через браузер, создав для команды свой контроллер CronController. Через браузер выполняется, а через SSH или cron не хочет, пишет, что нашел сайт, скачал содержимое (wget -O - 'http://site.ru/cron/index'), но также присутствует такая строка
Length: unspecified [text/html]
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: Выполнение действий по cron-у

Сообщение futbolim »

Код: Выделить всё

    'import'=>array(
        'application.models.*',
//        'application.components.*',
        'application.helpers.*',
    ), 
забыли ?
OKyJIucT
Сообщения: 33
Зарегистрирован: 2013.06.24, 14:31

Re: Выполнение действий по cron-у

Сообщение OKyJIucT »

futbolim писал(а):

Код: Выделить всё

    'import'=>array(
        'application.models.*',
//        'application.components.*',
        'application.helpers.*',
    ),
забыли ?
Ну конечно :D я и не знал, что оно требуется:) Спасибо за подсказку, теперь другие косяки полезли, к Cron, не имеющие отношения на мой взгляд:ugeek:

Код: Выделить всё

exception 'CException' with message 'CConsoleApplication and its behaviors do not have a method or closure named "getSession".
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: Выполнение действий по cron-у

Сообщение futbolim »

да, в консоли нет компонента работы с сессиями, поэтому нельзя там использовать сессии
OKyJIucT
Сообщения: 33
Зарегистрирован: 2013.06.24, 14:31

Re: Выполнение действий по cron-у

Сообщение OKyJIucT »

futbolim писал(а):да, в консоли нет компонента работы с сессиями, поэтому нельзя там использовать сессии
его в принципе нет и невозможно это сделать, или можно добавить/изменить что-то, и все заработает? Извиняюсь за глупые вопросы, в вопросе Yii я полный профан :roll:
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: Выполнение действий по cron-у

Сообщение futbolim »

его нет
rinat_
Сообщения: 77
Зарегистрирован: 2012.11.11, 21:12

Re: Выполнение действий по cron-у

Сообщение rinat_ »

Подключил PHPExcel через расширение yiiexcel которое есть на сайте. Все работает. Отключил автолоадер PHPExcel, добавил в import папку с vendor с расширением, в index.php добавил регистрацию автолоадера PHPExcel. Теперь по рецепту сделал пример. Все работает, кроме работы с библиотекой. Не очень понятно как для файла cron.php зарегистрировать автолоадер? Выходит ошибка после команды
php /var/www/site/protected/cron.php test

PHP Error[2]: include(PHPExcel_IOFactory.php): failed to open stream: No such file or directory
in file /var/www/framework/YiiBase.php at line 421
#0 /var/www/framework/YiiBase.php(421): autoload()
#1 unknown(0): autoload()
#2 /var/www/site/protected/commands/TestCommand.php(37): spl_autoload_call()
#3 /var/www/site/protected/commands/TestCommand.php(27): TestCommand->actionExcel()
#4 /var/www/site/protected/commands/TestCommand.php(13): TestCommand->actionIndex()
#5 /var/www/framework/console/CConsoleCommandRunner.php(67): TestCommand->run()
#6 /var/www/framework/console/CConsoleApplication.php(91): CConsoleCommandRunner->run()
#7 /var/www/framework/base/CApplication.php(169): CConsoleApplication->processRequest()
#8 /var/www/framework/yiic.php(33): CConsoleApplication->run()
#9 /var/www/site/protected/cron.php(12): require_once()
rinat_
Сообщения: 77
Зарегистрирован: 2012.11.11, 21:12

Re: Выполнение действий по cron-у

Сообщение rinat_ »

viewtopic.php?f=3&t=13685&p=81739#p81739 проблема решена
Ответить