Laravel调度程序在每月的第一个星期一运行任务

我需要在第一个星期一每月运行一次命令。

我找到了一个解决方案,但它不起作用,这个解决方案似乎在每周一和每月的第一天运行。尝试查看原始 cronjob,所以这似乎与 cronjob 本身无关,如果 Laravel 调度程序正在处理 cronjob,那么如果没有一些额外的触发机制,也是不可能的。

$schedule->command('my:command')
        ->monthly()
        ->mondays()
        ->at('09:00');

回答

您已经回答了您自己的问题:Laravel 的任务调度是基于 cron 作业的,您不能将“第一个星期一”作为原始 cron 表达式;只有一个月的几天。

所以,如果你需要的第一个星期一每月的唯一,也许调度的任务,每星期一,但随后把保护作为命令的第一线运行handle方式:

public function handle(): int
{
    if (! $this->isFirstMondayOfMonth()) {
        return 0;
    }

    // Rest of command

    return 0;
}

protected function isFirstMondayOfMonth(): bool
{
    $firstOfMonth = now()->firstOfMonth(1);
    $today = today();

    return $firstOfMonth->is($today);
}


以上是Laravel调度程序在每月的第一个星期一运行任务的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>