为什么我的 cron 作业在 laravel 中不起作用?

why my cron job is not working in laravel?

在数据库中我有列 visit_clear 我希望它在一天后为 0 所以我使用了这段代码 在 kernal.php

   <?php
    
    namespace App\Console;
    
    use Illuminate\Console\Scheduling\Schedule;
    use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
    
    class Kernel extends ConsoleKernel
    {
        protected $commands = [
        ];
        protected function schedule(Schedule $schedule)
        {
            $schedule->command('cron:update-user-not-new')->daily();
        }
    
        protected function commands()
        {
            $this->load(__DIR__.'/Commands');
    
            require base_path('routes/console.php');
        }
    }

并在 command/UpdateUserNotNew.php

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

use Illuminate\Support\Facades\DB;

class UpdateUserNotNew extends Command
{
 
    protected $signature = 'cron:update-user-not-new';

    protected $description = 'Command description';



    public function __construct()
    {
        parent::__construct();
    }

    public function handle()
    {
        $dayAgo = 1; // Days ago
        $dayToCheck = \Carbon\Carbon::now()->subDays($dayAgo)->format('Y-m-d');
        Customer::whereDate('visit_date', '<=', $dayToCheck)
        ->update([
            'visit_clear' => 0
        ]);
    }
}

我正在像这样安排命令,正如你所见cron:update-user-not-new 我应该使用 crone:UpdateUserNotNew 吗?

您需要像这样在 Kernel.php 中注册您的命令:

protected $commands = [
    'App\Console\Commands\UpdateUserNotNew',
];

然后您应该可以 运行 使用 php artisan cron:update-user-not-new

手动执行命令

为了使命令的自动 运行ning 起作用,您需要在系统的任务计划程序中添加一个条目,因为这是 Laravel 用于 运行 的按计划执行命令。

假设您正在使用 Linux,您需要向您的 crontab 添加一个条目。为此,在命令提示符中输入 crontab -e,按回车键,然后添加以下行:

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

不要忘记将 /path-to-your-project 替换为项目的根文件夹 完成对 crontab 的编辑后,保存并关闭编辑器,新条目应该会被安装,你的命令现在应该 运行 在计划中。

所有这些信息都来自 https://laravel.com/docs/7.x/scheduling,所以如果您需要更多信息,请查看那里