Планировщик вызовов Laravel

Я работаю с Laravel Task Scheduling, но у меня есть проблема, когда я вызываю какой-то метод с моего контроллера.

protected function schedule(Schedule $schedule)
{
    $schedule->call('[email protected]')->everyMinute();
    //$schedule->call('App\Http\Controllers\[email protected]')->everyMinute();
}

Когда я вызываю с недокументированной строкой, я получаю эту ошибку:

[ReflectionException]
Class RecurrenceInvoiceController does not exist

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

[PDOException] SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known

И

[ErrorException] PDO::__construct(): php_network_getaddresses: getaddrinfo failed: Name or service not known 

Где проблема? Какой способ является правильным для вызова метода из контроллера из Laravel Task Scheduling.

Ответ 1

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

$schedule->call('App\Http\Controllers\[email protected]')->everyMinute();

Я надеюсь, что это поможет кому-то еще;)

Ответ 2

Для меня первая ошибка выглядит так: вам нужно запустить composer update, затем composer dump-autoload.

Если это сработает, вы также получите вторую ошибку, значение ошибки 2002:

Невозможно подключиться к локальному серверу MySQL через сокет "(см. (Коды ошибок клиента и сообщения в документах MySQL).

Вам нужно настроить конфигурацию базы данных в файле .env

Ответ 3

Также теперь я тестирую более простую функцию для вставки новой валюты в базу данных. Вот код:

public function handle()
    {
        $currency                = new Currency();
        $currency->currency_name = 'EUR';
        $currency->save();

        $this->info('New currency is successfully generated!');
    }

Эта функция от laravel/app/Console/Commands. Я звоню из Kernel > schedule(). Не работает.

Когда я вставляю простую запись журнала в функцию handle(), например:

File::put(base_path() . '/storage/logs/test_logs.txt', 'Test log ' . Carbon::now()->format('Y-m-d H:i:s') . PHP_EOL);

это работает. Но когда я пытаюсь создать новый объект из Models и сохранить в db → , это не работает.

Ответ 4

OK. Я решил эту проблему. Проблема заключалась в контейнере Docker Cron. Контейнер Cron не был связан с контейнером MySQL. Спасибо за все ответы.

Ответ 5

Непосредственно поместите это в функцию расписания в файле kernel.php

$schedule-> вызов ( 'App\Http\Контроллеры\YourController @функции') → everyMinute();

Это будет запускаться через каждую минуту

Примечание:

В localhost вы должны запускать его вручную, но на сервере, вы должны попробовать эту команду в вашем cronjob, это будет автоматически вызывать функцию вашего контроллера через каждую минуту

php -d register_argc_argv = On/home/iflasity/public_html/foldername/artisan schedule: запустить>/dev/null 2> & 1

cd/home/iflasity/public_html/foldername && Расписание ремесленника php: run/dev/null 2> & 1