为什么我的 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,所以如果您需要更多信息,请查看那里
在数据库中我有列 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,所以如果您需要更多信息,请查看那里