laravel 9 计划作业已执行但未排队
laravel 9 scheduled job executed but not queued
我在将 laravel 从 8 升级到 9 后发现了一个奇怪的行为。我有一个执行某些作业的调度程序。
Kernel.php:
$schedule->job(new ImportAzApplications, 'imports')
->everyFiveMinutes()
->onOneServer()
->onFailure(function () {
Log::error('Scheduled "ImportAzApplications" failed');
});
$schedule->job(new ImportServicePrincipals, 'imports')
->everyFiveMinutes()
->onOneServer()
->onFailure(function () {
Log::error('Scheduled "ImportServicePrincipals" failed');
});
调度程序将由 kubernetes 中的 cron 作业执行。在artisan schedule:run
命令将每5秒执行一次。
日志:
[2022-04-23T10:55:06+00:00] Running scheduled command: App\Jobs\ImportServicePrincipals
[2022-04-23T10:55:06+00:00] Running scheduled command: App\Jobs\ImportAzApplications
现在我希望 imports
队列中有两个工作除外。我愿意。但只在我的开发机器上,而不是在登台服务器上。
其中一个职位是这样的:
class ImportAzApplications implements ShouldQueue, ShouldBeUnique
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$instance = new AzureApplications();
$params = $instance->azApplicationImportParams();
try {
$instance->import($params);
Log::debug('ImportAzApplications: Processing AzureApplications::importAzApplications');
} catch (Exception $exception) {
Log::error('ImportAzApplications: '.$exception->getMessage(), $params);
}
}
}
- 我启用了调试日志级别来获取调试日志
- 我运行 本地单元测试成功
- 我使用
artisan schedule:list',
artisan schedule:run'、artisan schedule:test
和 `artisan queue:work --queue=imports'[=49 在声明服务器上验证了调度程序工作流程=]
- 我通过
tinker
在线监控数据库:DB::table('jobs')->get()
和DB::table('failed_jobs')->get()
。两者都是空的
- 我运行手动在tinker中的Jobs
(new ImportAzApplications)->handle()
成功
- 我在同一队列中成功执行了不同的作业(导出任务)
我很确定这是一件超级简单的事情,我看不到 atm,但现在我运行没有想法,希望有人有更多的想法
非常感谢
已编辑
周末发生了一些神奇的事情,作业根据新日志执行。我将在 kubernetes 上进一步研究巫毒魔法。
我不得不向社区道歉。问题实际上是由管道工作流程引起的。
我 运行 laravel
kubernetes
。有多个 pod 可用于不同的练习。
app
实际的laraval应用程序
queue
使用php artisan queue:work --queue=imports
命令
处理队列中作业的具有幻灯片不同配置的相同容器映像
jobs
使用 App\Console\Kernel
中定义的 php artisan schedule:run
命令每分钟执行计划作业的 kubernetes 作业
一旦将新版本推送到注册表,kubectl set env
命令会设置新的构建版本,这会强制 app
Pod 获取新的容器映像。这是定义了kubernetes策略。
不过queue
运行还是老样子。我强制 queue
获取最新图像(没有 voodoo-magic)和执行的作业。
感谢所有花时间调查并尝试重现此行为的人。这并不容易。
干杯!
我在将 laravel 从 8 升级到 9 后发现了一个奇怪的行为。我有一个执行某些作业的调度程序。
Kernel.php:
$schedule->job(new ImportAzApplications, 'imports')
->everyFiveMinutes()
->onOneServer()
->onFailure(function () {
Log::error('Scheduled "ImportAzApplications" failed');
});
$schedule->job(new ImportServicePrincipals, 'imports')
->everyFiveMinutes()
->onOneServer()
->onFailure(function () {
Log::error('Scheduled "ImportServicePrincipals" failed');
});
调度程序将由 kubernetes 中的 cron 作业执行。在artisan schedule:run
命令将每5秒执行一次。
日志:
[2022-04-23T10:55:06+00:00] Running scheduled command: App\Jobs\ImportServicePrincipals
[2022-04-23T10:55:06+00:00] Running scheduled command: App\Jobs\ImportAzApplications
现在我希望 imports
队列中有两个工作除外。我愿意。但只在我的开发机器上,而不是在登台服务器上。
其中一个职位是这样的:
class ImportAzApplications implements ShouldQueue, ShouldBeUnique
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$instance = new AzureApplications();
$params = $instance->azApplicationImportParams();
try {
$instance->import($params);
Log::debug('ImportAzApplications: Processing AzureApplications::importAzApplications');
} catch (Exception $exception) {
Log::error('ImportAzApplications: '.$exception->getMessage(), $params);
}
}
}
- 我启用了调试日志级别来获取调试日志
- 我运行 本地单元测试成功
- 我使用
artisan schedule:list',
artisan schedule:run'、artisan schedule:test
和 `artisan queue:work --queue=imports'[=49 在声明服务器上验证了调度程序工作流程=] - 我通过
tinker
在线监控数据库:DB::table('jobs')->get()
和DB::table('failed_jobs')->get()
。两者都是空的 - 我运行手动在tinker中的Jobs
(new ImportAzApplications)->handle()
成功 - 我在同一队列中成功执行了不同的作业(导出任务)
我很确定这是一件超级简单的事情,我看不到 atm,但现在我运行没有想法,希望有人有更多的想法
非常感谢
已编辑
周末发生了一些神奇的事情,作业根据新日志执行。我将在 kubernetes 上进一步研究巫毒魔法。
我不得不向社区道歉。问题实际上是由管道工作流程引起的。
我 运行 laravel
kubernetes
。有多个 pod 可用于不同的练习。
app
实际的laraval应用程序
queue
使用php artisan queue:work --queue=imports
命令
jobs
使用 App\Console\Kernel
中定义的 php artisan schedule:run
命令每分钟执行计划作业的 kubernetes 作业
一旦将新版本推送到注册表,kubectl set env
命令会设置新的构建版本,这会强制 app
Pod 获取新的容器映像。这是定义了kubernetes策略。
不过queue
运行还是老样子。我强制 queue
获取最新图像(没有 voodoo-magic)和执行的作业。
感谢所有花时间调查并尝试重现此行为的人。这并不容易。
干杯!