【发布时间】:2018-07-18 22:58:15
【问题描述】:
我设置了一个虚拟的Command作业,其handle()函数如下:
public function handle()
{
$this->line('==================');
$this->line('Running my job at ' . Carbon::now());
$this->line('Ending my job at ' . Carbon::now());
}
如您所见,它实际上并没有做任何事情,只是将几行信息返回到标准输出。
现在,在我的App\Console\Kernel 班级中,我设置了以下时间表:
protected function schedule(Schedule $schedule)
{
$schedule
-> command('cbh:dummyCommand')
-> everyMinute()
-> appendOutputTo (storage_path().'/logs/laravel_output.log');
}
现在,我从命令行运行php artisan schedule:run。我的laravel_output.log 文件中的输出为
==================
Running my job at 2018-02-08 11:01:33
Ending my job at 2018-02-08 11:01:33
到目前为止一切顺利。看来我的日程安排正在运行。但是,如果我在同一分钟内再次运行该命令,我的日志文件现在显示为:
==================
Running my job at 2018-02-08 11:01:33
Ending my job at 2018-02-08 11:01:33
==================
Running my job at 2018-02-08 11:01:51
Ending my job at 2018-02-08 11:01:51
换句话说,日程安排似乎比每分钟都运行得更频繁,在我看来,这违反了我在日程安排中定义的规则。
更令人困惑的是,我可以将计划更改为每 5 分钟而不是每分钟运行一次:
protected function schedule(Schedule $schedule)
{
$schedule
-> command('cbh:dummyCommand')
-> everyFiveMinutes()
-> appendOutputTo (storage_path().'/logs/laravel_output.log');
}
然后运行php artisan schedule:run,然后我得到以下输出
没有计划的命令准备好运行。
我可以等待任意时间(即超过 5 分钟),但我的日志文件仍然没有输出。
当我使用 Windows 任务计划程序安排我的命令时,我观察到完全相同的行为(是的,我的开发环境是一个 Windows 7 机器,是的,这是一个相当于 Windows 的 cron 作业)。
问题
那么发生了什么? artisan schedule:run 命令如何确定哪些命令正在“等待”按计划执行?我曾想象会有某种日志文件来记录以下事实:“命令 X 的时间表为 1 小时,最后一次运行是在 09:00,所以不要在 10:00 之前再次执行它",但我一直找不到这样的日志。
谁能给我一个线索?
谢谢!!
【问题讨论】:
-
schedule:run需要每分钟执行一次。 -
@tkausl 你能详细说明一下吗?孤立地看你的评论不是很有用。
标签: laravel laravel-5 laravel-artisan