voodoosms/laravel-daemon

提供laravel的守护进程命令的包。

v1.1.5 2022-10-22 12:07 UTC

This package is auto-updated.

Last update: 2024-09-22 16:26:47 UTC


README

此包允许您构建长时间运行的命令/守护进程。当您需要运行频率高于laravel调度(即比1分钟更频繁)的某个东西时,这可能很有用。

安装

composer require voodoosms/laravel-daemon

创建守护进程

要创建守护进程,运行

php artisan make:daemon

这将在app/Console/Commands/Daemons中创建一个新的文件。Daemon抽象类扩展了正常的laravel命令,因此底层方法在正常的laravel命令中仍然可用。

添加功能

守护进程和正常命令之间的唯一区别是,逻辑现在放入了work(): void方法,而不是handle()方法。

例如,一个简单的示例,只将hello打印到控制台

public function work(): void
{
    $this->info('Hello');
}

您可以通过访问$this->runs来获取当前迭代次数。

您可以通过向工作方法添加参数来使用Laravel的依赖注入。

设置

您可以使用setUp(): void方法在守护进程开始之前执行一些操作,例如解析传递给命令的参数和选项。这类似于PHPUnit测试用例中使用的setUp方法。

public function setUp(): void
{
    //
}

拆卸

您可以使用tearDown(): void方法在守护进程完成后执行一些操作,这类似于PHPUnit测试用例中使用的tearDown方法。

public function tearDown(): void
{
    //
}

输出

上述示例的输出为

[2021-08-06 13:45:26.140] - V5wkJjo - Starting daemon
[2021-08-06 13:45:26.140] - V5wkJjo:a8c17bd - Hello
[2021-08-06 13:45:27.141] - V5wkJjo:7f48899 - Hello
[2021-08-06 13:45:28.141] - V5wkJjo:07e9cbd - Hello
[2021-08-06 13:45:29.142] - V5wkJjo:e69bc62 - Hello

您会注意到所有输出都预先加上时间戳和看似随机的字符。这些随机字符是实例和批次ID。当您运行多个相同守护进程的实例并需要过滤日志时,这很有用。您可以使用getInstanceId()getBatchId()方法访问这两个值。

选项

运行循环一次

有时您可能只想运行循环一次,为此您可以在运行命令时添加--once标志。

注意:这优先于--until-complete标志。

运行到完成

同样,您可能希望守护进程在完成工作后继续运行,您可以通过使用--until-complete标志来实现这一点。为此,您需要在work()方法中的某个位置调用$this->completed()方法。

重启守护进程

根据您如何托管项目,您可能需要在部署新代码时重启守护进程工作者。您可以通过运行php artisan daemon:restart来完成此操作。这与php artisan queue:restart的工作方式相同,即进程退出 - 您应该使用进程管理器,它将自动重启守护进程工作者。

配置

睡眠

守护进程在每次迭代之后将暂停,然后再继续。默认情况下是1秒暂停,但可以使用DAEMON_SLEEP环境变量来覆盖此设置。这以秒为单位,是一个浮点数,例如0.1

或者,您可以通过调用守护进程并使用标志来覆盖此设置:--sleep=0.1