TIP: Use Markdown or, <pre> for multi line code blocks / <code> for inline code.
These forums are read-only and for archival purposes only!
Please join our new forums at discourse.kohanaframework.org
  • Уважаемые форумчане, приветствую вас!
    Прошу объяснить мне несколько вещей. У меня появилась задача, написать скрипт который будет взаимодействовать с cron (взаимодействовать грубо сказано, точнее будет обрабатывать его запросы).
    Задача такова: есть cron который делает запрос на мой скрипт (например раз в 5 секунд), в скрипте необходимо определить от куда был запрос (из веба, или cron'а), и если из cron'а то вернуть ему json вида
     
    {
    "key1": "value",
    "key2": "value",
    "key3": "value",
    "key4": "value",
    ....
    }

    По наступлении задачи, я начал гуглить, но к сожалению нашел только примеры и описание из версии kohana 3.2, например проверки типа:

    if(!Kohana::$is_cli) {
    throw new HTTP_Exception_404('Запрашиваемая страница несуществует!'); // если запрос не из cron, выводим 404
    }
    но на сколько я знаю, всю работу с cron в версии 3.3.0 вынесли в модуль Minion, и как бы я не искал, я не чего не смог найти в интернете по этому поводу.

    Если кто поделится ссылочкой на статью, которая мне все объяснит или сам мне все это объяснит, буду благодарен.
  • if (PHP_SAPI == 'cli') { ... }
  • @WinterSilence я так понимаю эта проверка, на запрос от cron. Спасибо)
    Ну а json мне выдавать как и обычно? Или может быть есть какой-то специальный метод?
  • И еще вопрос: Класс мне закидывать в папку classes/task/ обязательно?
    Могу я допустим поместить его в classes/Controller/Task/Class.php и наследовать его от Minion_Task как сказано в оф. документации. И + ко всему в классе создать action обработчик для запроса, который будет принимать данные, либо через POST либо через GET.
    Вся суть в том, что крон делает запрос к примеру на страницу : site.com/task/2 где 2 - id записи в БД, по которой я должен вернуть данные в json формате.

    UPD: В бутстрапе естественно указать что запрос site.com/task/2 идет на тот самый класс (classes/Controller/Task/Class.php)
  • @next768
    "если из cron'а то вернуть ему json вида" - cron скрипты возвращают только ошибки т.к. обычно результат работы cron отправляется на почту админу.

    Сron работает в режиме коммандной строки (CLI), поэтому никаких POST\GET быть не может.

    Подобные вещи делаются следующим образом: создается Model_X. Controller_X, Task_X с параметром show_result(1 - выводим результат, 0 - нет). Соответственно Controller_X и Task_X работают с моделью Model_X. При запуске через cron в Task_X передаем --show_result=0, а при простом запуске --show_result=1

    Статья посвященная модулю minion http://brotkin.ru/2012/03/28/minion-module/

    На днях закончу со своим модулем, созданным на базе minion, он работает пошустрее и исправлен ряд ошибок\неточностей.
  • А как по мне, то использовать тот же gearman со скриптами под supervisord и забыть о кронах, запросах к бд каждые 5 минут.

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

    Повешать обработку обытий из ОС, что бы не прерывать задачу на полпути.

    Включать сборщих циклических ссылок.

    У меня так скрипты крутятся месяцами, потребляя 2 метра памяти.
  • @WinterSilence 'cron скрипты возвращают только ошибки т.к. обычно результат работы cron отправляется на почту админу.' - мне не из cron'a вернуть надо, а со стороны скрипта. Когда крон сделает запрос, мне из php нужно выдать ему json.
  • как все запущено...
  • Зачем такая сложность?

    Запускай из крона сразу кохану и пусть она делает всё что нужно сама и сразу.
  • @WinterSilence Я еще новичок, и по этому спрашиваю.. Если вы сразу стали отличным программистом, который все знает, и не когда не задает вопросов, то вы молодец. А я еще много чего не знаю, и спрашиваю у опытных людей, как мне лучше поступить..
  • @next768 Если хочешь хорошие ответы, нужно описать не только проблему но и задачу, тогда помочь проще, и смысл действий понятен.
  • @Fedot 'Задача такова: есть cron который делает запрос на мой скрипт (например раз в 5 секунд), в скрипте необходимо определить от куда был запрос (из веба, или cron'а), и если из cron'а то вернуть ему json' - задача была описана в шапке.
  • @Fedot Более подробнее: есть стартап, цель которого печать фотографий из instagram. Перед мной поставили задачу: у нас есть крон, который будет делать запрос на твой скрип (ссылка на него всегда будет разная. (site.com/test/5) - будет постоянно меняться цифра - id) раз в 5 секунд. Он должен возвращать нам json ответ, с ссылкой на картинку на сервере.
  • @next768 перед тем как что-то делать нужно хотя бы банально с терминологией ознакомится
  • @next768, прислушайся к людям, пусть советы не по технологии, но жизненные. Кажетцо вообще не с той стороны подход идет к задаче.
  • Что мешает всегда возвращать JSON? Ну или указывать формат явно, типа /test/5.json или /test/5.xml (можно и через query string, например /test/5/?format=json). Посмотрите, как реализованы REST API ВК/ФБ/Твиттера и тд

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

In this Discussion