Laravel Octane sail 运行之后,任务调度是怎么执行的

1. 运行环境

sail

1). 当前使用的 Laravel 版本?

laravel8.x

2). 当前使用的 php/php-fpm 版本?

PHP 版本:8.0

php-fpm 版本:8.0

3). 当前系统

sail
docker

4). 业务环境

sail
docker

5). 相关软件版本

2. 问题描述?

这个任务调度(php artisan schedule:run)是启动框架,任务就会自动运行吗?
任务后台运行 runInBackground() 是多进程运行吗?
Laravel Octane sail 运行之后,任务调度是怎么执行的

3. 您期望得到的结果?

4. 您实际得到的结果?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

当您在使用 Octane + Sail 运行 Laravel 应用程序时,任务调度器仍然可以正常工作。当您在 Octane 中运行 Laravel 应用程序时,任务调度器不再使用系统 Cron 作业来触发运行,而是使用 Octane 内置的定时器来触发运行。Octane 定时器是一个基于 ReactPHP 的定时器,它可以在 Laravel 应用程序中以非阻塞的方式运行任务调度器。这意味着,任务调度器可以在不阻塞应用程序的情况下运行,不会影响应用程序的性能和并发能力。

要在 Octane 中启用任务调度器,您需要在 Laravel 应用程序的 app/Console/Kernel.php 文件中注册定时任务,并在 Octane 配置文件中启用定时器。具体步骤如下:

  1. app/Console/Kernel.php 文件中注册定时任务。您可以使用 ->everyMinute()->daily() 等方法来指定任务的执行频率和时间条件。例如,以下代码将注册一个每分钟执行一次的任务:
    protected function schedule(Schedule $schedule)
    {
    $schedule->command('foo')->everyMinute();
    }
  2. 在 Octane 配置文件中启用定时器。您需要在 octane.php 文件中添加以下代码:
    'swoole' => [
     // ...
     'options' => [
         'enable_coroutine' => true,
         'timer' => true,
     ],
    ],
    该代码将启用 Swoole 定时器,以便在 Octane 中运行 Laravel 任务调度器。

启用定时器后,您可以在 Octane 中使用 php artisan octane:start 命令来启动 Laravel 应用程序,并在控制台中查看任务调度器的输出。当定时任务触发时,Octane 定时器将自动调用任务调度器并执行相应的任务。需要注意的是,任务调度器将在单个进程中运行,并使用共享内存来存储计划任务列表和任务状态,因此需要注意避免多个进程同时修改任务状态的情况。

1年前 评论
talers69 (楼主) 1年前
讨论数量: 5

没用过Octane runInBackground 应该是fork一个新的进程后台运行

php artisan schedule:run 是运行Kernel.php里面 crontab的时间 然后去执行对应的任务、、正常我们配置是

          • php artisan schedule:run 通过crontab去执行的

我用的laravels file swoole timer进程会每分钟执行一次LaravelScheduleJob 。。。Octane 应该也差不多吧

1年前 评论
talers69 (楼主) 1年前
talers69 (楼主) 1年前

当您在使用 Octane + Sail 运行 Laravel 应用程序时,任务调度器仍然可以正常工作。当您在 Octane 中运行 Laravel 应用程序时,任务调度器不再使用系统 Cron 作业来触发运行,而是使用 Octane 内置的定时器来触发运行。Octane 定时器是一个基于 ReactPHP 的定时器,它可以在 Laravel 应用程序中以非阻塞的方式运行任务调度器。这意味着,任务调度器可以在不阻塞应用程序的情况下运行,不会影响应用程序的性能和并发能力。

要在 Octane 中启用任务调度器,您需要在 Laravel 应用程序的 app/Console/Kernel.php 文件中注册定时任务,并在 Octane 配置文件中启用定时器。具体步骤如下:

  1. app/Console/Kernel.php 文件中注册定时任务。您可以使用 ->everyMinute()->daily() 等方法来指定任务的执行频率和时间条件。例如,以下代码将注册一个每分钟执行一次的任务:
    protected function schedule(Schedule $schedule)
    {
    $schedule->command('foo')->everyMinute();
    }
  2. 在 Octane 配置文件中启用定时器。您需要在 octane.php 文件中添加以下代码:
    'swoole' => [
     // ...
     'options' => [
         'enable_coroutine' => true,
         'timer' => true,
     ],
    ],
    该代码将启用 Swoole 定时器,以便在 Octane 中运行 Laravel 任务调度器。

启用定时器后,您可以在 Octane 中使用 php artisan octane:start 命令来启动 Laravel 应用程序,并在控制台中查看任务调度器的输出。当定时任务触发时,Octane 定时器将自动调用任务调度器并执行相应的任务。需要注意的是,任务调度器将在单个进程中运行,并使用共享内存来存储计划任务列表和任务状态,因此需要注意避免多个进程同时修改任务状态的情况。

1年前 评论
talers69 (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!