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);
}