windows - Luk tidligere PHP CLI proces i baggrundsprocessen blev åbnet af laravel håndværker

Indlæg af Hanne Mølgaard Plasc

Problem



I et af vores laravel-projekt i Windows-miljø har vi brug for en kølytter. Så i starten gik vi videre med kommandoen i kommandoprompt, og vinduet forblev åbent.


C:Apache24htdocslaravelartisan queue:listen --timeout=240


Men det er ikke et godt træk, fordi hvis nogen fejlagtigt lukkede eller efter systemopdatering, kan det lukke. Så vi planlagde til baggrundsproces med planlægger.


Vi kører en batchfil under systemstart og hver 1 time. Batchen har følgende kommando.


start /MIN /B php C:Apache24htdocslaravelartisan queue:listen --timeout=240


Men efter et par dage, da vi udforskede task manager, bemærkede vi, at der var mange PHP CLI kører i baggrundsprocessen resulterede i 100\% anvendt proces. Systemet fik afmatning. Så vi tilføjede også kommandoen til at dræbe, der allerede kører PHP CLI. Batchfilen lignede de nedenfor angivne kommandoer.


taskkill /f /fi "imagename eq php.exe"
start /MIN /B php C:Apache24htdocslaravelartisan queue:listen --timeout=240


Nu skal vi køre en anden baggrundsproces med 1 minuts interval. Hvis det kører hvert minut, så starter en ny PHP CLI baggrundsproces. Hvis vi dræber alle tidligere PHP CLI-baggrundsprocesser, dræber vi allerede PHP CLI for artisan queue.


Så for denne afhængighed, hvad ville være den bedste løsning til at løse dette problem.


Vores primære mål er, at der ikke vil være nogen forældreløs PHP CLI baggrundsproces, der kører, som bruger mere hukommelse.

Bedste reference


Jeg ses her endelig to muligheder:



  1. Indtast din PHP-proces, hvis der allerede er en anden, der kører. Hvis det er - bare længe info og kaution. Hvis det ikke er - fortsæt udførelsen. På denne måde kan du holde planlæggeren til at forsøge at starte processen som hvert minut eller deromkring. Hvis den foregående proces dør, genstartes den med et minut.

  2. Brug en eller anden procesovervågning. Jeg fandt noget lignende her for windows: winss. Det antages at arbejde ligner S6. Det vil end være sikker på, at der kun er én instans, der kører og genstarter den automatisk, når den dør. En anden vejleder er supervisord - det kan køres gennem Cygwin. Tag et kig på dette så svar: Er der Windows analog til supervisord? [5] [6]