【发布时间】:2026-01-02 04:35:01
【问题描述】:
在我们的一个 windows 环境下的 laravel 项目中,我们需要一个队列监听器。因此,一开始我们在命令提示符下传递了以下命令,并且该窗口保持打开状态。
C:\Apache24\htdocs\laravel\artisan queue:listen --timeout=240
但这不是一个好的举动,因为如果有人错误地关闭或在系统更新后它可能会关闭。所以我们用调度器计划了后台进程。
我们在系统启动期间和每 1 小时运行一个批处理文件。该批处理具有以下命令。
start /MIN /B php C:\Apache24\htdocs\laravel\artisan queue:listen --timeout=240
但是几天后,我们探索了任务管理器,我们注意到有许多 PHP CLI 在后台进程中运行,导致 100% 的进程被使用。系统变慢了。所以我们另外添加了命令来杀死已经运行的 PHP CLI。批处理文件类似于下面给出的命令。
taskkill /f /fi "imagename eq php.exe"
start /MIN /B php C:\Apache24\htdocs\laravel\artisan queue:listen --timeout=240
现在我们需要以 1 分钟的间隔运行另一个后台进程。如果它每分钟运行一次,则将启动新的 PHP CLI 后台进程。如果我们杀死所有过去的 PHP CLI 后台进程,它将杀死已经为 artisan queue 运行的 PHP CLI。
因此对于这种依赖关系,解决此问题的最佳方法是什么。
我们的主要目标是不运行任何消耗更多内存的孤立 PHP CLI 后台进程。
【问题讨论】:
标签: php windows laravel laravel-5.4 taskscheduler