Планировщик не запускает Laravel 5

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

Я протестировал код sql на отдельной странице php, и он работает, но планировщик, похоже, не работает.

Функция расписания находится в kernel.php. Функция обработки находится в Jobs/UpdateRates.

protected function schedule(Schedule $schedule)
{
    $schedule->job(new \App\Jobs\UpdateRates)->everyMinute();

}


public function handle()
{
    $url = "https://bitpay.com/api/rates";
    $json = file_get_contents($url);
    $data = json_decode($json, TRUE);
    $rate = $data[1]["rate"];    
    $usd_price = 10;     # Let cost of elephant be 10$
    $bitcoin_price = round( $usd_price / $rate , 8 );

    DB::insert('insert into settings (bitcoin_rate, monero_rate) values (?, ?)', [0, 1]);
}

person John Pooder    schedule 10.02.2019    source источник
comment
каков результат задания без планировщика, я имею в виду, если вы запустите его с помощью php artisan tinker, это сработает?   -  person Ahmed Nour Jamal El-Din    schedule 10.02.2019
comment
после запуска с tinker вставляет ли он какую-либо запись в базу данных?   -  person Ahmed Nour Jamal El-Din    schedule 10.02.2019
comment
Это может быть глупый вопрос, но что у вас запускает запланированные задачи?   -  person Michael Miller    schedule 10.02.2019
comment
Вы добавили задание cron?   -  person cmac    schedule 10.02.2019
comment
@MichaelMiller & cmac Я мог бы быть глупым, говоря это, но я думал, что это то, что делает строка в kernel.php, lol $schedule-›job(new \App\Jobs\UpdateRates)-›everyMinute();   -  person John Pooder    schedule 10.02.2019
comment
Не портите свой пост.   -  person Undo    schedule 10.02.2019


Ответы (1)


Вам нужно добавить в cron:

ВИМ /etc/кронтаб

Исправьте путь к вашему проекту, добавьте эту строку

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

Это то, что вызывает Laravel, а затем вы можете выполнять остальную часть планирования из проекта Laravel.

И теперь вы можете просто добавлять такие задачи и больше не беспокоиться об обновлении cron.

protected function schedule(Schedule $schedule)
{
    $schedule->job(new DailyEmailReports)->dailyAt();
    $schedule->job(new SomeOtherThing)->hourly();
    $schedule->job(new SomeElse)->everyFiveMinutes();     
}
person cmac    schedule 10.02.2019
comment
Большое спасибо, я не понимаю, в чем смысл функции -›everyMinute(); часть в kernel.php, если бы мне все равно пришлось использовать cron - person John Pooder; 10.02.2019
comment
Что ж, теперь вы можете добавлять все больше и больше $schedule-›command(SomeCommand::class)-›daily(); $schedule-›command(OtherCommand::class)-›everyFiveMinutes(); - person cmac; 10.02.2019
comment
Имеет ли это больше смысла @JohnPooder? - person cmac; 10.02.2019
comment
Нет, я не понимаю, что ты говоришь - person John Pooder; 10.02.2019
comment
По сути, cron — это то, как ваш сервер выполняет действия каждые xxx (секунды, минуты и т. д.). Строка, которую вы добавляете в cron, запускается php artisan schedule:run, etc, etc… примерно каждую миллисекунду, и теперь внутри вашего проекта Laravel вы можете настраивать задачи и запускать их каждую минуту, час и т. д., просто добавив еще один: $schedule-›job(new SomeNewTask)-›everyFiveMinutes(); И не нужно добавлять еще одну строку в cron. Это имеет смысл? - person cmac; 10.02.2019
comment
Таким образом, добавив эту строку в cron, вы теперь можете использовать Планировщик заданий laravel.com/docs/5.7/scheduling#introduction Вместо использования cron серверов для планирования. - person cmac; 10.02.2019