수퍼바이저가 있는 Laravel 작업자

우리 중 많은 사람들이 도커 컨테이너 또는 웹 서버에서 Laravel Worker로 감독자를 설정하는 데 어려움을 겪었습니다. 그렇지 않다면 당신은 나처럼 운이 좋지 않습니다. 😉

수행하는 데 어려움을 겪고 있거나 작업이 무엇인지, 감독자가 도커 컨테이너 또는 웹 서버 내부에서 작업을 유지 관리하는 방법, 이러한 모든 항목을 설정하는 방법에 대해 알고 싶다면 올바른 게시물에 있는 것 같습니다.

유익한 정보를 알려주는 내 여정을 따르십시오.

전제 조건


  • laravel 대기열 설정:

  • php artisan queue:table
    php artisan migrate
    


    마이그레이션 후, failed_jobs & jobs라는 2개의 테이블을 찾아야 합니다. 그렇지 않으면 절차를 다시 따르거나 더 나은 이해를 위해 laravel queue을 확인하십시오.
  • 작업을 추적하도록 작업 배치를 설정합니다.

  • php artisan queue:batches-table
    php artisan migrate
    


    job_batches라는 테이블이 표시되어야 합니다. 배치 작업에 대한 자세한 내용은 batch jobs laravel의 아름다운 설명서를 확인하십시오.
  • 배치 작업에 대한 몇 가지 테스트 방법을 설정합니다.

  •     public function testJob() {
            $path = storage_path('test');
            $files = glob("$path/user.csv"); // Parse the stored csv
            $header = [];
            foreach ($files as $key => $file) {
                $data = array_map('str_getcsv', file($file));
                if($key === 0) {
                    $header = $data[0];
                    unset($data[0]);
                }
            }
            $batch = Bus::batch([new TestCsvForSupervisor($header, 
            $data)->dispatch();
            return $batch->id;
        }
    
    


    우리는 여기서 무엇을 합니까?
    좋아, 예를 들어 100,000명의 사용자 정보가 포함된 csv를 가져왔습니다. 이메일, 사용자 이름, 주소 등. TestCsvForSupervisor는 삽입, 업데이트 또는 테이블과 데이터 비교와 같은 일부 검사 또는 작업을 처리하기 위한 작업 클래스입니다. 사용자. 장인의 명령을 쓰는 것처럼 간단합니다. 😉

    TestCsvForSupervisor 작업 클래스에서:

        public function handle()
        {
            try{
                foreach ($this->data as $row) {
                    $result = array();
                    $result = User::whereName($row[0])->first() ? 'Found' : 'Not Found';
                    Log::info('User checked successfully with email: '.$row[1]);
                }
            } catch (Exception $err) {
                Log::info('Error occured with message: '.$err);
            }
        }
    


    어려운 점은 사용자 테이블에 20,000명의 사용자 정보가 있고 여기서 무엇을 했습니까? csv 데이터와 사용자 테이블 데이터를 비교하고 확인 결과를 로그에 저장합니다. 그런 다음 작업을 발송하여 수행할 보류 중인 작업을 테이블에 저장합니다.

    설정 감독자



    이제 2단계를 수행할 수 있는 도커 컨테이너에 관리자를 설정할 차례입니다.
  • 명령 스크립트로 docker bash에 액세스하고 감독자를 설치할 수 있습니다(글로벌 배포 또는 팀 협업이 아닌 로컬 테스트용임)
  • Dockerfile에서 명령 스크립트를 통합할 수 있습니다.

  • 둘 다 파헤치기 전에 감독자에 대한 몇 가지 세부 정보를 알려주십시오.

    Supervisor is basically linux based daemon that runs in the background. You have to configure your laravel app so that supervisor know about background jobs. It monitors the executing or executable jobs and if for any interference the jobs accidentally stop ex. server down after the restarting the supervisor automatically starts the job from where it stops and monitor the failed, pending and success jobs through this time and can deliver us jobs report.



    docker bash에서 설치:

    sudo apt-get install supervisor
    


    Daemon을 사용하여 Dockerfile에서 설치

    app/docker-conf/php/Dockerfile에서 다음 스크립트를 작성합니다.

    RUN apt-get install -y supervisor
    


    그런 다음 docker를 빌드하고 시작합니다.

    docker compose build
    docker compose up -d // -d for running the docker in background
    


    전역적으로 사용할 수 있으므로 docker 데몬 기반(step-2) 슈퍼바이저를 따르는 것이 좋습니다. 그래서 우리는 그것을 계속할 것입니다.

    루트 디렉토리에서 laravel-worker.conf라는 파일을 만들고 파일을 작성하고 저장하십시오.

    [program:laravel-worker]
    process_name=%(program_name)s_%(process_num)02d
    command=php /app/artisan queue:work // you may use extra attributes like --sleep=3
    autostart=true
    autorestart=true
    # stopasgroup=true
    # killasgroup=true
    ;user=
    numprocs=8
    redirect_stderr=true
    stdout_logfile=/app/storage/logs/worker.log​
    stopwaitsecs = 100
    


    docker bash의/etc/supervisor/디렉토리에서 Supervisord.conf라는 파일을 찾을 수 있습니다. 다음 스크립트를 사용하여 Supervisord.conf 파일의 마지막 줄을 덮어쓰고 저장합니다.
    [include]
    files = /etc/supervisor/conf.d/*.conf /app/laravel-worker.conf

    그런 다음 다음 명령을 실행하여 감독자를 시작합니다.

    # Start the service
      service supervisor start
    
    # Read the new config from supervisord file
      supervisorctl reread
    
    # Activate the configuration
      supervisorctl update
    
    # Start queue command for running jobs
      supervisorctl start laravel-worker:* or laravel-worker
    
    # Check the status of new config operation
      supervisorctl status​
    



    축하합니다 🥳, laravel-job뿐만 아니라 슈퍼바이저를 사용하여 실제 자동화된 작업을 훌륭하게 수행했습니다.

    아래 샷과 같이 감독자를 시작한 후 job_batches 테이블에서 상태 및 고유 ID가 있는 작업 목록을 찾을 수 있습니다.



    감독관에 대한 흥미로운 사실이 하나 있습니다. 감독자를 개발하는 데 사용되는 언어를 알고 있습니까?

    파이썬입니다🐍😲

             Thanks for reading with so much patience. ❤️
    

    좋은 웹페이지 즐겨찾기