我目前有一项任务,从我的网站收集使用情况统计信息,并设置为自动通过电子邮件发送给客户端。
问题在于,本月的第一天可能是一个非工作日,我想这不是灾难,但看起来有点不专业。
这就是我目前的安排方式:
$schedule
->command("report", [ "--email" => "example@example.com" ]) //My command which accepts the email as a parameter
->monthly();
我正在考虑做以下事情:
$schedule
->command("report", [ "--email" => "example@example.com" ]) //My command which accepts the email as a parameter
->monthlyOn(1)
->when(function () {
if (in_array(Carbon::now()->dayOfWeek,[Carbon::SATURDAY,Carbon::SUNDAY])) {
return false;
}
return true;
});
$schedule
->command("report", [ "--email" => "example@example.com" ]) //My command which accepts the email as a parameter
->monthlyOn(2)
->when(function () {
if (Carbon::now()->dayOfWeek == Carbon::MONDAY) {
return true; //1st was in the weekend
}
return false;
});
$schedule
->command("report", [ "--email" => "example@example.com" ]) //My command which accepts the email as a parameter
->monthlyOn(3)
->when(function () {
if (Carbon::now()->dayOfWeek == Carbon::MONDAY) {
return true; //1st and 2nd was in the weekend
}
return false;
});
然而,对于像这样简单的事情,这看起来很奇怪。
所以我的问题:
when
条件失败,该任务是否会再次尝试,直到成功为止? (假设这是一个没有但不确定的)答案 0 :(得分:1)
我会将此作为社区维基的答案发布给其他人,以便他们在将来需要时使用:
您可以将条件放入实际的crontab命令中:
[ "$(date '+%a')" = "Mon" ] && echo "It's Monday"
现在,如果这样 你有一个月前七天的情况是正确的 第一个星期一。请注意,在crontab中,需要使用百分比语法 但是要逃脱:
0 12 1-7 * * [ "$(date '+\%a')" = "Mon" ] && echo "It's Monday"
以上引用自https://superuser.com/questions/428807/run-a-cron-job-on-the-first-monday-of-every-month
通过这种方式设置为cronjob,每周只运行一次。我相信这将是您实现目标的最有效方法。
答案 1 :(得分:0)
我知道接受的答案是正确的,但是,我总是有不同的方式更喜欢这个:
->monthlyOn(Carbon::parse('first monday of this month')->format('d'), '5:00')