在不同的日期每 N 分钟安排一次作业
Scheduling jobs every N minutes at different days
我必须 运行 特定时间的 cronjob:
第一个:工作日 9:00 - 18:00 每 2 分钟一班
第二个:周六 10:00 - 18:00 每 2 分钟一班
我能到达的最远的地方是:
$schedule->call(function () {
(new SendSMS())->run();
})->weekdays()->between('9:00', '18:00');
我不知道如何添加 everyTwoMinutes 约束,因为我只找到了这些方法:
->everyMinute();
->everyFiveMinutes();
->everyTenMinutes();
->everyThirtyMinutes();
第二个问题是,对于第二种情况,我不想添加另一个这样的时间表:
$schedule->call(function () {
(new SendSMS())->run();
})->saturdays()->between('11:00', '18:00');
我想写一个两次都匹配的,可以吗?
您可以在扩展 Event
的 class 中创建自己的自定义函数
public function everyTwoMinutes()
{
return $this->cron('*/2 * * * * *');
}
已更新:这将 运行 以所需的时间间隔。
$schedule->call(function () {
$datetime = date('Y-m-d H:i:s');
echo $datetime;
})->everyMinute()->when(function() {
$now = new \DateTime();
# don't run on Sundays
if ($now->format('l') == 'Sunday') {
return false;
}
# run every two minutes
if ($now->format('i')%2 == 1) {
return false;
}
if ($now->format('l') == 'Saturday') {
$start_date = new \DateTime('today 10:00');
$end_date = new \DateTime('today 18:00');
return ($start_date <= $now && $now < $end_date);
} else {
$start_date = new \DateTime('today 09:00');
$end_date = new \DateTime('today 18:00');
return ($start_date <= $now && $now < $end_date);
}
});
我必须 运行 特定时间的 cronjob:
第一个:工作日 9:00 - 18:00 每 2 分钟一班
第二个:周六 10:00 - 18:00 每 2 分钟一班
我能到达的最远的地方是:
$schedule->call(function () {
(new SendSMS())->run();
})->weekdays()->between('9:00', '18:00');
我不知道如何添加 everyTwoMinutes 约束,因为我只找到了这些方法:
->everyMinute();
->everyFiveMinutes();
->everyTenMinutes();
->everyThirtyMinutes();
第二个问题是,对于第二种情况,我不想添加另一个这样的时间表:
$schedule->call(function () {
(new SendSMS())->run();
})->saturdays()->between('11:00', '18:00');
我想写一个两次都匹配的,可以吗?
您可以在扩展 Event
public function everyTwoMinutes()
{
return $this->cron('*/2 * * * * *');
}
已更新:这将 运行 以所需的时间间隔。
$schedule->call(function () {
$datetime = date('Y-m-d H:i:s');
echo $datetime;
})->everyMinute()->when(function() {
$now = new \DateTime();
# don't run on Sundays
if ($now->format('l') == 'Sunday') {
return false;
}
# run every two minutes
if ($now->format('i')%2 == 1) {
return false;
}
if ($now->format('l') == 'Saturday') {
$start_date = new \DateTime('today 10:00');
$end_date = new \DateTime('today 18:00');
return ($start_date <= $now && $now < $end_date);
} else {
$start_date = new \DateTime('today 09:00');
$end_date = new \DateTime('today 18:00');
return ($start_date <= $now && $now < $end_date);
}
});