在添加和 运行 另一个任务之前检查调度程序任务的状态

Check status of an scheduler task before adding and running another task

我对 laravel 框架中的 任务调度 有疑问。我已经在控制台命令列表中定义了命令 currency:updatecurrency:archive。现在,我想在 schedule 方法中 运行 这两个命令,但条件如下:

如果这是 运行 currency:archive 命令的时间,请不要 运行 另一个命令 currency:update 直到上一个命令(即 currency:archive) 结束;否则 运行 currency:update 命令。

这是我当前在调度方法中的代码:

$schedule->command('currency:archive')
         ->dailyAt('00:00')
         ->withoutOverlapping();

$schedule->command('currency:update')
         ->everyMinute()
         ->withoutOverlapping();

如何修改?

谢谢。

在 laravel 时间表文档中提到了以下两个功能:

  1. 真值测试约束docs
$schedule->command('emails:send')->daily()->skip(function () {
    return true;
});
  1. 任务挂钩docs
$schedule->command('emails:send')
         ->daily()
         ->before(function () {
             // Task is about to start...
         })
         ->after(function () {
             // Task is complete...
         });

您可以考虑在 before() 闭包中将 $achriveCommandIsRunning 之类的变量设置为 true。在 skip() 闭包中,您可以 return $archiveCommandIsRunning;,在 after() 闭包中,您可以再次将变量设置回 false。

谢谢,

我按照你说的修改了我的代码,现在可以用了。 这是最终代码:

$isArchiveCommandRunning = false;
$schedule->command('currency:archive')
    ->dailyAt('00:00')
    ->before(function () use (&$isArchiveCommandRunning) {
        $isArchiveCommandRunning = true;
    })
    ->after(function () use (&$isArchiveCommandRunning) {
        $isArchiveCommandRunning = false;
    })
    ->withoutOverlapping();

$schedule->command('currency:update')
    ->everyMinute()
    ->skip(function () use (&$isArchiveCommandRunning) {
        return $isArchiveCommandRunning;
    })
    ->withoutOverlapping();