За последние 24 часа нас посетили 17930 программистов и 1569 роботов. Сейчас ищут 1273 программиста ...

ПЛАНИРОВЩИК ЗАДАЧ

Тема в разделе "Laravel", создана пользователем Taktreba, 9 ноя 2017.

  1. Taktreba

    Taktreba Активный пользователь

    С нами с:
    11 янв 2017
    Сообщения:
    543
    Симпатии:
    132
    пытаюсь понять как работает планировщик задач в Laravel.
    Для примера пытаюсь сделать что бы каждую минуту отправляло письмо на почту

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

    итак
    через консоль создал App\Console\Commands\bitcoinTest
    в нем
    PHP:
    1. protected $signature = 'bitcoin:sendEmail';
    PHP:
    1. public function handle()
    2.     {
    3.         //
    4. //        $provider = $this->argument('provider');
    5.  
    6.  
    7.         $to = 'еее@gmail.com';
    8.         $subject = 'test mail';
    9.  
    10.         $message = mail($to,$subject, 'test message from laravel');
    11.         if($message){
    12.             $flag = true;
    13.             echo 'mail go';
    14.         }else {
    15.             $flag = false;
    16.             echo 'mail NOT go';
    17.         }
    18.         return $flag;
    19.     }
    В файле App\Console\Kernel.php
    PHP:
    1. protected $commands = [
    2.         //
    3.         'App\Console\Commands\bitcoinTest'
    4.     ];
    и
    PHP:
    1. protected function schedule(Schedule $schedule)
    2.     {
    3.  
    4.         $schedule->command('bitcoin:sendEmail')
    5.             ->everyMinute();
    6.     }
    через консоль запускаю php artisan bitcoin:sendEmail - письмо уходит (локально)
    ДАЛЬШЕ ДЕЛАЮ НАУГАД ТАК КАК НЕ ЗНАЮ КАК ПРАВИЛЬНО =)
    дальше что бы запустить планировщик в консоли php artisan schedule:run - письмо приходит но только одни раз сразу через минуту ничего не происходит

    в чем может быть моя ошибка?
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    В том, что документацию не читаешь. Я тебе писал в личке, команду php artisan schedule:run надо таки поставить на крон, а вот остальные команды приложения, которые должны выполняться по расписанию, уже не надо - Laravel при каждом запуске этой команды будет проверять, подошло ли для них время и запускать. https://laravel.com/docs/master/scheduling, раздел "Starting The Scheduler":
     
    TeslaFeo нравится это.
  3. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
  4. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    я то думал, как в cms реализован это планировщик. Думал, что API есть у крона, к которому можно обратиться из php, а оно оказывается вон как.
    Крон дрючит твою сиэмэску или движок, а тот подключает нужные скрипты.
    ппц, как всё просто оказалось.
     
  5. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    В разных по-разному. У WP например задачи встроенного планировщика запускаются при заходе посетителей на сайт. Но, ИМХО, это бред, поэтому я никогда им не пользуюсь
     
    Fell-x27 и TeslaFeo нравится это.
  6. Taktreba

    Taktreba Активный пользователь

    С нами с:
    11 янв 2017
    Сообщения:
    543
    Симпатии:
    132
    я ее вдоль и поперек перечитал на двух языках
    написано что "вам нужно добавить следующую запись Cron на свой сервер". Я не понимаю значение этой фразы )))
    Дальше написано (как раз для таких как я) - "если вы не знаете как добавить cron на сервер используйте сервис laravel forge" это какая то платная пое***ина. То есть на винде нет не какой возможности сделать планировщик laravel без гемора и сторонних сервисов? такого быть не может.
    В этом собственно и состоит мой вопрос
     
  7. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    На винде есть свой планировщик, надо добавить в него. Но Laravel тоже больше на Linux рассчитан, как и PHP и всё остальное
    --- Добавлено ---
    Ну что такое cron знаешь? Он берёт команды из crontab, вот в эту crontab нужно добавить такую запись.
    --- Добавлено ---
    upload_2017-11-9_15-36-3.png
    Хотя, я бы не стал в Windows рабочей машины добавлять ежеминутный опрос стороннего сервера.
     
    Taktreba нравится это.
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    То есть, чтоб понятно было, на windows можно вот эту команду:
    Код (Text):
    1.  php /path-to-your-project/artisan schedule:run
    повесить на этот планировщик, а потом пользоваться как написано в доке.
     
  9. yanuzay

    yanuzay Активный пользователь

    С нами с:
    28 мар 2018
    Сообщения:
    501
    Симпатии:
    58
    на винде, если ты используешь OpenServer. то в нем свой cron есть.
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    в том, что господней волей он сам по себе не запускается :D

    единственный её смысл в том, что нужно дёргать это дело переодически
    можешь запускать это руками для проверки, работает ли
    или можешь сделать батник с вечным циклом и слипом на минуту - будет тебе вполне такой крон на время разработки
    добавлять прям это в реальный шедулер просто для разработки я смысла не вижу.
     
  11. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    На винде есть cygwin который успешно эмулирует *nix окружение, в т.ч. cron.

    Ну а на Win10 вроде встроенная поддержка линукса, но я не пробовал.