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');
});
我需要在每个月的第一个星期一运行指挥一次。
我找到了一个解决方案,但它不起作用,这个解决方案似乎每个星期一和每个月的第一天 运行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');
});