使用 Laravel 每天安排两次任务
Posted
技术标签:
【中文标题】使用 Laravel 每天安排两次任务【英文标题】:scheduling a task twice a day with Laravel 【发布时间】:2016-09-30 06:43:32 【问题描述】:我正在尝试每天安排两次命令:
这是我的代码:
protected function schedule(Schedule $schedule)
$morningCarbonHour = Carbon::now();
$morningCarbonHour->hour = 23;
$morningCarbonHour->minute = 27;
$morningCarbonHour->second = 00;
$hourIni = $morningCarbonHour->format('H:i');
$nightCarbonHour = Carbon::now();
$nightCarbonHour->hour = 23;
$nightCarbonHour->minute = 28;
$nightCarbonHour->second = 00;
$hourFin = $nightCarbonHour->format('H:i');
$schedule->command('check:time')
->twiceDaily($hourIni,$hourFin)
->timezone('America/Mexico_City');
我收到此错误消息:
[2016-05-31 23:29:01] production.ERROR: exception 'InvalidArgumentException' with message 'Invalid CRON field value 23:27,23:28 at position 1' in /home/forge/myproject/vendor/mtdowling/cron-expression/src/Cron/CronExpression.php:147
堆栈跟踪:
我真的不知道为什么???有什么想法???
【问题讨论】:
【参考方案1】:twiceDaily
接受以小时为单位的参数。
默认值为public function twiceDaily($first = 1, $second = 13)
,这意味着任务将在每天的 1:00 和 13:00 执行。
您正在尝试运行使用此 (twiceDaily
) 方法在技术上不可用的任务 23:27 和 23:28,因为它不接受分钟作为参数。
解决方案
将twiceDaily()
更改为<command>->cron('27,28 23 * * *');
。
它将在 23:27 和 23:28 运行你的命令。
或者,如果您想一天两次以不同的小时和分钟运行命令,您应该使用带有 dailyAt()
的两个单独的命令(一个命令上有两个 dailyAt()
,将覆盖并且不会按您的意愿工作)。
【讨论】:
好的,我明白了。在实际情况下,获得 2 小时(初始化和结束)的算法有点棘手,所以,我不能像你说的那样做。它应该与 2 ->dailyAt('13:00'); 一起使用吗?还是第二个会覆盖第一个?基本上,这 2 个小时将是随机时间,例如:09:xx 和 19:xx 23:27 和 23:28 仅用于测试 两个dailyAt()
会覆盖自己。如果您必须坚持dailyAt()
,唯一的解决方案是放置 2 个相同的命令,但执行日期不同。
哦哦。所以,2 dailyAt in 1 命令将覆盖,但我应该执行 2 个命令,应该没问题?
@JuliatzindelToro 谢谢,我添加了关于dailyAt()
的部分。以上是关于使用 Laravel 每天安排两次任务的主要内容,如果未能解决你的问题,请参考以下文章