Programing

queue : work --daemon과 queue : listen의 차이점은 무엇입니까?

crosscheck 2020. 11. 27. 07:47
반응형

queue : work --daemon과 queue : listen의 차이점은 무엇입니까?


오프라인 작업 서버를 설정하고 있습니다. 나는 설명서를 읽은하지만, 난 여전히 정말 두 명령의 차이점을 볼 수 없습니다 : artisan queue:work --daemonartisan queue:listen. 데몬을 실행하려면 어떤 명령을 사용해야합니까?


수정 업데이트 2017-04-07 :

이제 큐를 실행하는 세 가지 방법이 있습니다.

  • queue:work-이것은 새로운 "데몬"프로세스입니다 (플래그가 더 이상 필요하지 않음). 프레임 워크는 "한 번"실행 된 다음 작업을 계속 반복합니다. 이것은 무기한으로 계속됩니다. queue:listen프레임 워크가 전체 시간 동안 유지되기 때문에 메모리 / cpu를 덜 사용합니다 . 또한를 사용 queue:restart하여 패치 중에 푸시 한 코드 변경 사항을 대기열에 업데이트하도록 해야합니다 .

  • queue:work --once-이렇게하면 프레임 워크가 실행되고 하나의 작업을 처리 한 다음 종료됩니다. 개발 중 테스트 등에 유용합니다.

  • queue:listen-이것은 모든주기에서 프레임 워크를 실행하고 하나의 작업을 처리 한 다음 완전히 종료 한 다음 프레임 워크를 다시 실행하고 무한 반복합니다. 즉, 각 작업이 처리 된 후 모든 메모리 / 프로세스가 해제됩니다. 메모리 누수가 있으면 queue:work시도해보십시오.

--daemon플래그는 더 이상 이러한 명령에 영향을주지 않습니다.

원래 답변 :

나열된 두 가지 문제가 있습니다.

artisan queue:workartisan queue:listen

  • queue:work대기열에서 다음 작업을 간단히 꺼내서 해당 작업 만 처리합니다. 이것은 하나의 큐 명령이 처리되면 명령 프롬프트로 돌아가는 '일회성'명령입니다.
  • queue:listen큐를 듣고 수신 한 큐 명령을 계속 처리합니다. 중지 할 때까지 무기한 계속 실행됩니다.

Laravel> = 4.2에는 --daemon명령이 추가되었습니다. 작동 방식은 모든 대기열이 처리 된 후 전체 프레임 워크를 재부팅하는 대신 대기열을 직접 계속 실행하는 것입니다. 이것은 대기열의 메모리 및 CPU 요구 사항 크게 줄이는 선택적 명령입니다 .

--daemon명령 의 중요한 점 은 애플리케이션을 업그레이드 할 때 특별히를 사용하여 큐를 다시 시작해야한다는 것입니다 queue:restart. 그렇지 않으면 큐에 메모리에 이전 코드가 남아 있기 때문에 모든 종류의 이상한 오류가 발생할 수 있습니다.

따라서 " 데몬을 실행하기 위해 어떤 명령을 사용해야합니까? "라는 질문에 답하려면 거의 항상queue:work --daemon


변경 되었지만 문서에 언급되지 않았습니다.

 --daemon  Run the worker in daemon mode (Deprecated)

이제 기본적 php artisan queue:work 으로 데몬 모드에서 실행됩니다.

그래서 queue:work지금 다시 부팅 프레임 워크없이 처리 작업을 계속

한 번 실행하려면 명령은 다음과 같습니다.

php artisan queue:work --once


가장 중요한 차이점은 즉 queue:work --daemon각 프레임 워크를 다시 시작하지 않고 작업queue:listen 수행합니다 . 실제로 listen각 작업에 대해 완전히 새로운 Laravel 프로세스를 시작합니다.

직접 해보십시오 : 2 개의 터미널을 열고 work --daemon한쪽과 listen다른 쪽에서 실행 하십시오. work창보다 훨씬 빠르기 때문에 작업을 실행합니다 listen.


Laravel 5.7 --stop-when-empty부터 새로운 옵션 queue:work명령 에 추가되었습니다 . 이 옵션을 사용하면 현재 대기열이 비워 질 때까지 처리 된 다음 명령이 종료됩니다.

문서 에 따르면 :

--stop-when-empty 옵션을 사용하여 작업자에게 모든 작업을 처리 한 다음 정상적으로 종료하도록 지시 할 수 있습니다. 이 옵션은 대기열이 비워진 후 컨테이너를 종료하려는 경우 Docker 컨테이너 내에서 Laravel 대기열을 작업 할 때 유용 할 수 있습니다.

php artisan queue:work --stop-when-empty

참고 URL : https://stackoverflow.com/questions/26048698/what-is-the-difference-between-queuework-daemon-and-queuelisten

반응형