为什么我的cron工作不在laravel工作



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

<?php

namespace AppConsole;

use IlluminateConsoleSchedulingSchedule;
use IlluminateFoundationConsoleKernel 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');
}
}

和在命令/UpdateUserNotNew.php 中

<?php
namespace AppConsoleCommands;
use IlluminateConsoleCommand;
use IlluminateSupportFacadesDB;
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 = CarbonCarbon::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 = [
'AppConsoleCommandsUpdateUserNotNew',
];

然后,您应该能够使用php artisan cron:update-user-not-new手动运行命令

为了使命令的自动运行正常,您需要在系统的任务调度程序中添加一个条目,因为这是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因此,如果你需要更多信息,请查看

相关内容

  • 没有找到相关文章

最新更新