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

Laravel scheduler run task on first monday of month

我需要在每个月的第一个星期一运行指挥一次。

我找到了一个解决方案,但它不起作用,这个解决方案似乎每个星期一和每个月的第一天 运行ning。尝试查看原始 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);
}
$schedule->command('foo')->mondays()->at("17:14")
            ->when(function () {
                return Carbon::parse('first monday of this month')->format("Y-m-d") == Carbon::now()->format('Y-m-d');
            });