时间: 2025年07月04日 02:15
任务: 在System模块创建清理job_runs表的命令,1小时调用一次,保留5天的数据
为KKU Laravel项目的System模块创建专门的job_runs表清理命令,实现自动化的队列运行记录清理功能,保持数据库性能。
文件: app/Module/System/Commands/CleanJobRunsCommand.php
system:clean-job-runs--days=5 # 保留天数,默认5天
--batch-size=1000 # 批处理大小,默认1000
--dry-run # 预演模式,不实际删除
--force # 强制执行,跳过确认
文件: app/Module/System/Providers/SystemServiceProvider.php
registerCommands()方法中注册清理命令registerSchedules()方法中注册每小时执行的定时任务// 每小时清理job_runs表,保留5天数据
$schedule->command('system:clean-job-runs')
->hourly()
->description('清理job_runs表过期记录(保留5天)')
->withoutOverlapping() // 防止重复执行
->runInBackground(); // 后台运行
文件: config/app.php
在providers数组中添加了SystemServiceProvider的注册:
// System 模块
\App\Module\System\Providers\SystemServiceProvider::class,
php artisan system:clean-job-runs --help
输出正确的命令帮助信息,包含所有参数说明。
php artisan system:clean-job-runs --dry-run
测试结果:
php artisan schedule:list
确认定时任务正确注册:
0 * * * * php artisan system:clean-job-runs ......... Next Due: 45分钟后
php artisan system:clean-job-runs --days=10 --dry-run
保留10天时没有需要清理的记录,验证了时间过滤逻辑正确。
可以通过命令参数调整:
# 保留7天数据,每批500条
php artisan system:clean-job-runs --days=7 --batch-size=500
# 强制执行,不需要确认
php artisan system:clean-job-runs --force
# 仅预览,不实际删除
php artisan system:clean-job-runs --dry-run
成功为System模块创建了完整的job_runs表清理功能:
该功能将有效控制job_runs表的大小,提升系统整体性能。