laravel artisan打开了关闭后台PHP CLI流程的后台流程

时间:2018-04-25 07:03:22

标签: php windows laravel laravel-5.4 taskscheduler

在我们在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后台进程,这会消耗更多内存。

1 个答案:

答案 0 :(得分:0)

我在这里看到最后两个选项:

  1. 使用PHP进程检查是否还有另一个正在运行。如果是 - 只需要很长时间的信息和保释。如果不是 - 继续执行。这样,您可以让调度程序尝试像每分钟左右一样启动该过程。如果前一个过程终止,它将在一分钟内重新启动。

  2. 使用某种流程主管。我为windows发现了类似的内容:winss。它的工作方式类似于S6。它将确保只有一个实例运行,并在它死亡时自动重启它。另一位主管是监督员 - 它可以通过Cygwin运行。看看这个SO答案:Is there Windows analog to supervisord?