You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查看Laravel调度命令的上次执行时间?最优方案咨询

Laravel调度任务上次执行时间的最优实现方案

核心思路:追踪任务本身的执行状态,而非每条记录

你不需要更新40条服务记录的时间,只需要单独追踪调度任务本身的上次执行时间,这样既轻量又能准确判断任务是否正常运行。

方案1:创建极简单记录表(最推荐)

这是平衡可靠性和性能的最优解,完全规避缓存清空风险,性能开销可以忽略。

  • 建表:只需要一个简单的表,比如task_executions,字段包括task_name(任务唯一标识,比如service_ping_checker)、last_executed_at(时间戳)。
  • 实现:在你的ping任务的handle()方法开头,执行一行极简更新语句:
    DB::table('task_executions')
        ->updateOrInsert(
            ['task_name' => 'service_ping_checker'],
            ['last_executed_at' => now()]
        );
    
  • 查看:直接查询该表的last_executed_at值,对比当前时间就能判断任务是否按时运行(比如30秒调度的话,超过1分钟没更新就说明异常)。
  • 优势:数据持久化不会丢失;单条SQL操作,极低性能开销,和你检查40个服务的操作完全不冲突。

方案2:利用Laravel日志(适合快速排查,不适合长期监控)

如果不想新增数据库表,可以在任务开头写入一条极简日志:

Log::info('Service ping checker executed at: ' . now()->toIso8601String());
  • 查看:直接在storage/logs/laravel.log里搜关键词Service ping checker executed,找到最新的时间戳即可。
  • 注意:如果开启了日志按天分割,要对应到当天的日志文件;单条日志写入的IO开销可以忽略,不会影响30秒一次的调度频率。

方案3:缓存存储(适合临时验证,不推荐长期依赖)

用缓存存储执行时间,比如Redis或文件缓存:

Cache::put('service_ping_checker_last_executed', now()->timestamp, 86400); // 缓存1天
  • 查看:通过Cache::get('service_ping_checker_last_executed')获取时间戳,转成日期后对比当前时间。
  • 劣势:缓存清空(比如重启缓存服务、缓存过期)会丢失记录,无法追溯历史执行情况,只适合临时验证任务是否在运行。

额外优化:任务执行结果追踪(可选)

如果需要更细致的监控,可以在task_executions表新增status(成功/失败)、execution_duration(执行耗时)字段,这样不仅能确认任务是否运行,还能知道任务执行是否成功、耗时多少。

示例更新逻辑:

$startTime = microtime(true);
// 你的ping服务检查逻辑...
$isSuccess = true; // 根据实际检查结果赋值
$duration = round(microtime(true) - $startTime, 2);

DB::table('task_executions')
    ->updateOrInsert(
        ['task_name' => 'service_ping_checker'],
        [
            'last_executed_at' => now(),
            'status' => $isSuccess ? 'success' : 'failed',
            'execution_duration' => $duration
        ]
    );

内容的提问来源于stack exchange,提问作者clover

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 13:23:25