Laravel 5 - 没有重叠的任务计划不起作用
Laravel 5 - Task schedule withoutOverlapping not working
我尝试 运行 安排 Laravel 5。当我 运行 这个:
时它工作正常
$schedule->call(function() {
// do something here..
})->everyMinute();
但是当我添加 withoutOverlapping()
时,调度程序从未 运行 任务:
$schedule->call(function () {
// do something here..
})->everyMinute()->name('job_name')->withoutOverlapping();
*这些时间表代码写在/app/Console/Kernel。php
在使用 ->withoutOverlapping()
时删除 ->everyMinute()
它仍然会每分钟 运行 但不会重叠。
更新
从 Laravel v. 5.5+ 开始,您可以指定在 "without overlapping" 锁过期之前必须经过多少分钟。
例如。 ->withoutOverlapping(10)
可用于在 10 分钟后解锁 "overlapping"。
顺序很重要,但从未被提及。
试试这个
$schedule->call(function () {
// do something here..
})->name('job_name')->withoutOverlapping()->everyMinute();
这对我来说是这样的:
(1) call -> (2) name -> (3) withoutOverlapping -> (4) dailyAt -> (5) onOneServer
当你弄乱订单时,你可能会遇到类似
的错误
A scheduled event name is required to prevent overlapping. Use the name
method before 'withoutOverlapping'.
或
Call to undefined method Illuminate\Console\Scheduling\Schedule::name()
withoutOverlapping 方法在执行命令时创建互斥文件,并在执行完成时删除互斥文件。
调度程序检查是否存在任何不允许再次执行的命令的互斥文件。
在您的情况下,互斥文件不会被删除,它会阻止命令再次 运行。
您可以清除 laravel 缓存以使其再次使用 php artisan cache:clear
cron withoutOverlapping() 正在运行。让我们了解它是如何工作的
例如:
$schedule->command('command')
->hourly()
->withoutOverlapping();
withoutOverlapping 表示当cron 运行时,它会在storage/framework/ 目录中生成一个锁定文件,一旦完成,它将删除锁定文件。现在下次开始,它将检查锁定文件是否存在。如果有锁定文件,则意味着前一个 cron 未完成,并且不允许 cron 与前一个重叠。
In this scenario, the lock file is there into the storage/framework/ directory so that the cron is not working
锁定文件如下所示: schedule-random_string
例如:schedule-0bfdb7f0bc14b27d84c7d6f2a2528e85b0847fc6
修复: 删除或重命名锁定文件 (storage/framework/schedule-0bfdb7f0bc14b27d84c7d6f2a2528e85b0847fc6)
我尝试 运行 安排 Laravel 5。当我 运行 这个:
时它工作正常$schedule->call(function() {
// do something here..
})->everyMinute();
但是当我添加 withoutOverlapping()
时,调度程序从未 运行 任务:
$schedule->call(function () {
// do something here..
})->everyMinute()->name('job_name')->withoutOverlapping();
*这些时间表代码写在/app/Console/Kernel。php
在使用 ->withoutOverlapping()
时删除 ->everyMinute()
它仍然会每分钟 运行 但不会重叠。
更新
从 Laravel v. 5.5+ 开始,您可以指定在 "without overlapping" 锁过期之前必须经过多少分钟。
例如。 ->withoutOverlapping(10)
可用于在 10 分钟后解锁 "overlapping"。
顺序很重要,但从未被提及。
试试这个
$schedule->call(function () {
// do something here..
})->name('job_name')->withoutOverlapping()->everyMinute();
这对我来说是这样的:
(1) call -> (2) name -> (3) withoutOverlapping -> (4) dailyAt -> (5) onOneServer
当你弄乱订单时,你可能会遇到类似
的错误A scheduled event name is required to prevent overlapping. Use the
name
method before 'withoutOverlapping'.
或
Call to undefined method Illuminate\Console\Scheduling\Schedule::name()
withoutOverlapping 方法在执行命令时创建互斥文件,并在执行完成时删除互斥文件。
调度程序检查是否存在任何不允许再次执行的命令的互斥文件。
在您的情况下,互斥文件不会被删除,它会阻止命令再次 运行。
您可以清除 laravel 缓存以使其再次使用 php artisan cache:clear
cron withoutOverlapping() 正在运行。让我们了解它是如何工作的 例如:
$schedule->command('command')
->hourly()
->withoutOverlapping();
withoutOverlapping 表示当cron 运行时,它会在storage/framework/ 目录中生成一个锁定文件,一旦完成,它将删除锁定文件。现在下次开始,它将检查锁定文件是否存在。如果有锁定文件,则意味着前一个 cron 未完成,并且不允许 cron 与前一个重叠。
In this scenario, the lock file is there into the storage/framework/ directory so that the cron is not working
锁定文件如下所示: schedule-random_string 例如:schedule-0bfdb7f0bc14b27d84c7d6f2a2528e85b0847fc6
修复: 删除或重命名锁定文件 (storage/framework/schedule-0bfdb7f0bc14b27d84c7d6f2a2528e85b0847fc6)