我该如何在特定日期安排Laravel任务?

5

现在阅读 文档,我没有看到直接的函数可以实现这个功能,但是我发现可以使用monthly()方法结合when()方法来实现,所以我想,也许我可以这样做:

$schedule->command('send:reminders')->monthly()->when(function() {
    return date('d') == '23';
});

但是现在我担心这种方法行不通,因为据我所知它只会尝试when()约束一次每个月(可能不是我想要的日期),然后当它失败时就跳过那个月。至少从阅读laravel源代码的结果来看,我猜是这样。

那么我现在很困惑,我该怎么办呢?


可能不是最优雅的方式,但如果你将 monthly 改为 daily 并保留 when 条件,我认为那会起作用。 - Mark Davidson
2个回答

7
最简单的方法可能是利用 cron 方法,因此在您的情况下。
$schedule->command('send:reminders')->cron('0 0 23 * *');

这句话的意思是在每月的23日午夜运行。

4
一个小更新,从laravel 5.2.23开始,monthlyOn 可以使用了。 - Jigar

1
我们还可以使用 Laravel 调度中默认提供的函数。 public function frequency(\Illuminate\Console\Scheduling\Event $event){ $event->monthlyOn(24, '17:00'); } monthlyOn(Date,'Time') 函数表示此调度程序将在每个月的 24 日下午 5 点运行。请注意保留 HTML 标签。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接