1、创建job
php artisan make:job job名称 //比如:ProcessDatabaseTable
2、在app/jobs创建ProcessDatabaseTable.php文件。定义逻辑如:
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use DB;
class ProcessDatabaseTable implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public function handle()
{
// 你的数据处理逻辑,比如读取并编辑表中的数据
$data = DB::table('your_table_name')->get();
foreach ($data as $row) {
// 这里添加你的编辑逻辑
// 例如: $row->update(['column_name' => 'new_value']);
}
}
}
3、设置任务调度
在App\Console\Kernel.php
文件的 schedule
方法中设置定时任务
protected function schedule(Schedule $schedule)
{
$schedule->job(new ProcessDatabaseTable())
->dailyAt('01:00');//每天凌晨1点执行
}
4、配置队列
在根目录.env文件配置队列驱动:
QUEUE_CONNECTION=redis
5、启动任务调度器
php artisan schedule:run --verbose --no-interaction
或持续执行
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
注意:
-
* * * * *
: 这是Cron作业的时间表,表示“每分钟”。你可以根据需要调整这些星号来改变执行频率(比如,0 3 * * *
会在每天凌晨3点执行)。 -
cd /path-to-your-project
: 这个命令改变当前工作目录到你的Laravel项目的根目录。/path-to-your-project
需要替换成你的实际项目路径。 -
&&
: 这是一个逻辑运算符,用于连接两个命令。只有当左边的命令成功执行(退出状态码为0)时,才会执行右边的命令。 -
php artisan schedule:run
: 这是Laravel框架中的命令,用于运行任务调度器。Laravel的任务调度器允许你定义计划任务,如定期清理缓存、发送邮件、数据库备份等。当这个命令被执行时,Laravel会检查app/Console/Kernel.php
文件中的schedule
方法,并执行所有计划的任务。 -
>> /dev/null 2>&1
: 这部分是关于命令输出的重定向。>> /dev/null
表示标准输出(stdout,正常的信息输出)会被丢弃,不会显示在任何地方。/dev/null
是一个特殊的文件,任何写入它的内容都会被丢弃。2>&1
表示标准错误输出(stderr,错误信息输出)被重定向到标准输出的位置。在这里,因为标准输出已经被重定向到了/dev/null
,所以标准错误也会被丢弃。这一操作使得整个命令执行过程静默无痕,除非出现严重错误,否则不会在终端或日志中产生任何输出。