【问题标题】:Laravel Scheduler (withoutOverlapping)Laravel 调度器(无重叠)
【发布时间】:2018-02-23 21:16:09
【问题描述】:

我有两个应用程序在同一台服务器上运行。 现在看来,当将withoutOverlapping() 添加到调度程序作业并通过 cron 本身管理基本 cronjob 时,这两个应用程序在执行中相互阻塞。 会这样吗?

【问题讨论】:

    标签: laravel


    【解决方案1】:

    是的,withoutOverlapping 仅适用于每个应用程序。

    Laravel 在存储文件夹中创建一个包含作业哈希的文件。这样,如果文件存在,Laravel 就知道作业仍在运行。一个应用程序不可能知道另一个应用程序当前是否正在运行作业,因为它无权访问另一个应用程序的存储文件夹。

    【讨论】:

    • 感谢您的评论,但我所经历的正是您所描述的相反。如果我的两个应用程序都有队列工作的调度程序,那么似乎一个应用程序阻止了另一个应用程序的执行。
    【解决方案2】:

    如果你的代码如下所示

    $schedule->command('process:queue 0')->everyMinute()->withoutOverlapping();
    $schedule->command('process:queue 1')->everyMinute()->withoutOverlapping();
    

    这是因为具有不同参数的相同命令可能会被认为是重叠的。

    即作业的哈希将只考虑命令签名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-02
      • 1970-01-01
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 2016-12-12
      • 2020-02-25
      相关资源
      最近更新 更多