如何在Laravel中将任务计划程序设置为在给定时间戳下仅运行一次?

时间:2017-03-24 23:26:49

标签: php laravel cron task scheduled-tasks

如何仅在特定时间戳执行一次功能,而不是定期运行?

这是我的申请: 我有一个2行的表:id(主键)和时间(epoch时间戳存储为整数)。现在,对于每个条目,我想调用一个函数,该函数将在存储在表中的时间戳处执行。我该如何实现这一目标?

还有更好的替代任务计划程序吗? 我使用的是Laravel 5.4(如果重要的话)

编辑:我确实知道一种解决方法,但我正在寻找最有效的解决方案。

1 个答案:

答案 0 :(得分:0)

概念是每分钟运行一次调度程序,然后选择该时间段内的记录。执行该功能。假设秒没有关系,我写了下面的代码。如果秒数很重要,您必须每秒检查如何运行调度程序,但概念是相同的。

希望这会对你有所帮助

use Carbon\Carbon;
...
$schedule->call(function() {

    // Look in your table for `time` in current minute, between 0-59s
    $entries = TheTable::where([
        ['time', '>=', Carbon::now()->second(0)->timestamp],
        ['time', '<=', Carbon::now()->second(59)->timestamp]
    ]);

    // Loop through the results & call the function

})->everyMinute();