这个问题类似于this one,但是:
emailOutputTo
方法发送链式(第2,第3或第4)命令的输出 单一命令调度程序代码
这工作正常 - 命令和电子邮件输出:
protected function schedule(Schedule $schedule)
{
$schedule ->command('commandA:myoption')
->emailOutputTo('myemail@gmail.com');
}
链式命令/呼叫 - 使用以前的SO答案
前面提到的accepted answer正确运行commandB
,但因为它使用了->call()
,所以它不包含电子邮件中commandB
的输出:
protected function schedule(Schedule $schedule) {
$schedule ->command('commandA:myoption')
->then(function() {
return $this->call('commandB:myoption');
})
->emailOutputTo('myemail@gmail.com');
}
... as noted here只有在使用->call()
方法时才能通过调度程序->command()
方法发送电子邮件:
emailOutputTo,sendOutputTo和appendOutputTo方法是命令方法独有的,不支持调用。
我尝试修改上述accepted answer以使用->command()
而不是->call()
:
protected function schedule(Schedule $schedule) {
$schedule ->command('commandA:myoption')
->then(function() {
$this->command('commandB:myoption');
->emailOutputTo('myemail@gmail.com');
})
->emailOutputTo('myemail@gmail.com');
}
...出现以下错误:
[Symfony的\元器件\调试\异常\ FatalThrowableError]
类型错误:函数参数太少 Illuminate \ Foundation \ Console \ Kernel :: command(),1在第33行传入/app/Console/Kernel.php,正好是2个
链接/系列命令的其他尝试
尝试了各种方法来链接命令using a then
function - 似乎没有工作(运行命令或输出):
选项1 - 尝试将输出包含在通用电子邮件中
结果= commandB
未执行,仅通过电子邮件发送命令A输出:
protected function schedule(Schedule $schedule) {
$schedule ->command('commandA:myoption')
->then(function(Schedule $schedule) {
return $schedule->command('commandB:myoption');
})
->emailOutputTo('myemail@gmail.com');
}
选项2 - 尝试将输出包含在单独的电子邮件中 (通过在主要和第二个命令中发送单独的电子邮件输出)
结果= commandB
未执行,仅通过电子邮件发送命令A输出:
protected function schedule(Schedule $schedule) {
$schedule ->command('commandA:myoption')
->then(function(Schedule $schedule) {
$schedule->command('commandB:myoption')
->emailOutputTo('myemail@gmail.com');
})
->emailOutputTo('myemail@gmail.com');
}
选项3 - 另一种注入$ schedule的变体 - 没有成功(相同的结果)
protected function schedule(Schedule $schedule) {
$schedule ->command('commandA:myoption')
->then(function() use($schedule) {
return $schedule->command('commandB:myoption')
->emailOutputTo('myemail@gmail.com');
})
->emailOutputTo('myemail@gmail.com');
}
问题
如何在调度程序中链接命令并将所有命令的输出发送到
...顺便说一句,为什么每个人都对Laravel如此兴奋,因为文档如此可怜不完整!!?
答案 0 :(得分:0)
在文档中它说:
<块引用>默认情况下,同时调度的多个任务会执行 根据它们在您的日程表中定义的顺序顺序 方法。
在我的用例中,我只有三个每天只需要运行一次的任务(阅读:早上),我刚刚创建了三个调度程序来同时运行。 在您的情况下,这可能不起作用,因为您的一项任务可能运行超过 5 分钟。
我的最终看起来像这样:
// $schedule->command('inspire')->hourly();
$schedule->command('command:first')
->dailyAt('12:34')
->timezone('Europe/Oslo');
$schedule->command('command:second')
->dailyAt('12:34')
->timezone('Europe/Oslo');
$schedule->command('command:third')
->dailyAt('12:34')
->timezone('Europe/Oslo');
只有当您有多个任务必须按特定顺序运行,并且每天(或每周)只运行一次时,此解决方案才有效。
我尝试使用 then 闭包,但它只运行了函数内的一个命令。