我想在Mac上的Laravel中使用Schedule
。这是我的crod文件:
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/local/sbin:~/bin:/usr/bin:/bin:/usr/sbin:/sbin
* * * * * php /Applications/MAMP/htdocs/xxxy/xxyyy/artisan schedule:run >> $run >> /dev/null 2>&1
这是Kernel.php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
protected $commands = [
//Commands\Inspire::class,
];
protected function schedule(Schedule $schedule)
{
$schedule->command(function () {
dispatch(new \App\Jobs\sendPush);
})->everyMinute();
}
}
我用工匠在终端输入的任何内容都会出现此错误:
[ErrorException]类Closure的对象无法转换为字符串
你知道如何让工匠工作吗?
sendPush.php
class sendPush extends Job implements ShouldQueue
{
use InteractsWithQueue, SerializesModels;
public function __construct()
{
//
}
public function handle(MessageController $MessageController)
{
$MessageController->sendDefault();
}
答案 0 :(得分:1)
我之前从未使用过这些,但快速浏览docs似乎突出了您的问题:
您可以在App \ Console \ Kernel类的schedule方法中定义所有计划任务。首先,让我们看一个安排任务的示例。在这个例子中,我们将安排每天午夜调用一个Closure。在Closure中,我们将执行数据库查询以清除表:
和
除了安排Closure调用之外,您还可以安排Artisan命令和操作系统命令。例如,您可以使用命令方法使用命令的名称或类来安排Artisan命令:
似乎不是使用command
方法,而是在传递call
而不是命令名称或类时使用Closure
方法。
所以我相信你只需要将代码更新到下面:
protected function schedule(Schedule $schedule) {
$schedule->call(function () {
dispatch(new \App\Jobs\sendPush);
})->everyMinute();
}