050357-添加URS活跃状态更新定时任务.md 4.1 KB

URS活跃状态更新定时任务配置

任务概述

时间: 2025年07月05日 03:57
任务: 为UrsUpdateActiveStatusCommand添加任务调度,设置在每日1:05执行,后台运行
状态: ✅ 已完成

实施内容

1. 添加定时任务调度

文件: app/Module/UrsPromotion/Providers/UrsPromotionServiceProvider.php

在现有的定时任务配置中添加了URS用户活跃状态更新任务:

// 每天01:05执行用户活跃状态更新
$schedule->command('urs:update-active-status')
    ->dailyAt('01:05')
    ->description('URS用户活跃状态更新 - 基于最近15天活动时间更新用户活跃状态')
    ->withoutOverlapping() // 防止重复执行
    ->runInBackground(); // 后台运行

2. 任务配置详情

  • 执行时间: 每日 01:05
  • 命令: php artisan urs:update-active-status
  • 描述: URS用户活跃状态更新 - 基于最近15天活动时间更新用户活跃状态
  • 防重复: withoutOverlapping() - 防止任务重复执行
  • 后台运行: runInBackground() - 任务在后台执行,不阻塞其他任务

3. 执行时间安排

当前URS模块的定时任务时间安排:

  • 00:30 - URS合伙人分红任务
  • 01:05 - URS用户活跃状态更新任务

这样的时间安排确保:

  1. 避免与其他任务冲突
  2. 在用户活动较少的凌晨时段执行
  3. 为后续可能的达人等级更新任务预留时间

验证结果

1. 定时任务列表确认

通过 php artisan schedule:list 命令验证,任务已成功注册:

5  1 * * *  php artisan urs:update-active-status ....... Next Due: 21小时后

2. 命令功能测试

使用 --dry-run 模式测试命令功能:

php artisan urs:update-active-status --dry-run

测试结果:

  • 总用户数:3124
  • 活跃用户:1727 (55.28%)
  • 不活跃用户:1397
  • 最近24小时更新:1830
  • 需要检查的用户:1293

命令运行正常,统计信息准确。

技术特性

1. 防重复执行

使用 withoutOverlapping() 确保同一时间只有一个活跃状态更新任务在运行,避免:

  • 数据库锁冲突
  • 重复更新同一用户
  • 系统资源浪费

2. 后台执行

使用 runInBackground() 确保任务在后台执行,特点:

  • 不阻塞其他定时任务
  • 提高系统整体性能
  • 适合长时间运行的任务

3. 详细描述

添加了清晰的任务描述,便于:

  • 系统管理员了解任务用途
  • 日志记录和监控
  • 问题排查和维护

监控建议

1. 日志监控

建议监控以下日志:

  • 任务执行开始和结束时间
  • 处理的用户数量
  • 活跃状态变更统计
  • 错误和异常情况

2. 性能监控

关注以下性能指标:

  • 任务执行时长
  • 数据库查询性能
  • 内存使用情况
  • 系统负载影响

3. 业务监控

监控业务指标:

  • 活跃用户比例变化
  • 活跃状态更新成功率
  • 数据一致性检查

后续优化

1. 批处理优化

如果用户数量继续增长,可以考虑:

  • 调整批处理大小(当前默认1000)
  • 分时段执行(如分多个时间点执行)
  • 增加并发处理能力

2. 缓存优化

可以考虑添加缓存机制:

  • 缓存用户活动时间查询结果
  • 缓存活跃状态计算结果
  • 减少数据库查询压力

3. 监控告警

建议添加监控告警:

  • 任务执行失败告警
  • 执行时间过长告警
  • 活跃用户比例异常告警

相关文件

  • app/Module/UrsPromotion/Providers/UrsPromotionServiceProvider.php - 定时任务配置
  • app/Module/UrsPromotion/Commands/UrsUpdateActiveStatusCommand.php - 命令实现
  • app/Module/UrsPromotion/Services/UrsActiveUserService.php - 活跃用户服务

部署说明

此更改已包含在代码中,部署后定时任务将自动生效。无需额外的配置或手动设置crontab。

Laravel的定时任务通过以下方式运行:

# 在服务器crontab中添加(如果尚未添加)
* * * * * cd /path/to/project && php artisan schedule:run >> /dev/null 2>&1

这样Laravel会自动管理所有注册的定时任务,包括新添加的URS活跃状态更新任务。