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. 您实际得到的结果?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 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年前

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