개키우는개발자 : )

[Laravel] centos8 에서 queue 사용방법 본문

PHP/Laravel

[Laravel] centos8 에서 queue 사용방법

DOGvelopers 2023. 4. 18. 15:06
반응형

라라벨에서 큐를 사용하기 위한 채널중 하나인 database 채널을 사용하는 방법입니다.

database를 사용하려면 기본적으로 디비 연결을 제대로 설정하고 job 테이블이 존재 해야합니다.

1. .env 설정

QUEUE_CONNECTION=database

2. config/queue.php 설정

'connections' => [

        'database' => [
            'driver' => 'database',
            'table' => 'table',
            'queue' => 'default',
            'retry_after' => 90,
        ]
]

driver: 데이터베이스 연결 드라이버를 설정합니다. 'database'를 설정하여 데이터베이스를 사용할 수 있습니다.
table: Queue에 사용할 데이터베이스 테이블 이름을 설정합니다.
queue: Queue에서 사용할 대기열 이름을 설정합니다. 여기서는 'default'를 사용합니다.
retry_after: 작업이 실패할 경우 다시 시도할 시간(초)을 설정합니다.

3. 슈퍼바이저 설치 및 명령어

백그라운드에서 계속 실행하기 위해서는 슈퍼바이저라는 프로세스 관리도구가 필요합니다.

1.EPEL 리포지토리 설치
sudo dnf install epel-release

2.슈퍼바이저 설치
sudo dnf install supervisor

3.슈퍼바이저 실행
sudo systemctl start supervisord

4.슈퍼바이저 정지
sudo systemctl stop supervisord

5.슈퍼바이저 재시작
sudo systemctl restart supervisord

5.슈퍼바이저 상태 확인
sudo systemctl status supervisord

4.슈퍼바이저 상태확인

Active (running) 상태가 보이면 정상 작동중입니다.

[root@DEPS-API mall]# sudo systemctl status supervisord
● supervisord.service - Process Monitoring and Control Daemon
   Loaded: loaded (/usr/lib/systemd/system/supervisord.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2023-04-18 13:48:43 KST; 36min ago
  Process: 123936 ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf (code=exited, status=0/SUCCESS)
 Main PID: 123939 (supervisord)
    Tasks: 2 (limit: 98523)
   Memory: 62.3M
   CGroup: /system.slice/supervisord.service
           ├─123939 /usr/bin/python3.6 /usr/bin/supervisord -c /etc/supervisord.conf
           └─123940 php /home/centos/mall/artisan queue:work database --queue=image --sleep=3 --tries=3

 4월 18 13:48:43 DEPS-API systemd[1]: Starting Process Monitoring and Control Daemon...
 4월 18 13:48:43 DEPS-API systemd[1]: Started Process Monitoring and Control Daemon.

5. 라라벨 queue worker 등록하기

cd /etc/supervisord.d 로 이동하여 해당 디렉토리 하위에 슈퍼바이저에서 관리하는 설정파일들을 생성 할 수 있습니다.

저같은경우에는 vi laravel-worker.ini 파일을 만들어 설정하였습니다.

 

서버 3곳에 설정을 했는데 무지성 복붙으로 인해 --queue=image 이름을 모두 똑같이 복사하여 다른 큐는 실행되지 않았었습니다.

잘 살피셔야 합니다.

[program:laravel-worker]
command=php /home/centos/mall/artisan queue:work database --queue=image --sleep=3 --tries=3
process_name=%(program_name)s_%(process_num)02d
numprocs=1
priority=999
autostart=true
autorestart=true
startsecs=1
startretries=3
user=root
redirect_stderr=true
stdout_logfile=/home/centos/mall/queue-worker.log
  • program:laravel-worker: 프로그램의 이름을 지정합니다.
  • command=php /home/centos/mall/artisan queue:work database --queue=image --sleep=3 --tries=3: 실행할 명령어를 지정합니다. 이 경우에는 php /home/centos/mall/artisan queue:work 명령어를 실행하고, --queue=image 옵션으로 큐 이름을 지정하며, --sleep=3 옵션으로 워커가 비어있을 때 대기할 시간을 지정하며, --tries=3 옵션으로 작업을 처리할 시도 횟수를 지정합니다.
  • process_name=%(program_name)s_%(process_num)02d: 프로세스 이름을 지정합니다. % (program_name) s는 프로그램 이름을 의미하며, % (process_num) 02d는 2 자리 숫자로 프로세스 ID를 의미합니다.
  • numprocs=1: 실행할 프로세스의 개수를 지정합니다.
  • priority=999: 프로세스 우선순위를 지정합니다.
  • autostart=true: supervisord가 시작될 때 프로그램을 자동으로 시작하도록 지정합니다.
  • autorestart=true: 프로그램이 비정상적으로 종료될 때 자동으로 다시 시작하도록 지정합니다.
  • startsecs=1: 프로그램이 시작될 때 몇 초를 기다려야 하는지 지정합니다.
  • startretries=3: 프로그램이 시작되지 않을 때 재시도할 최대 횟수를 지정합니다.
  • user=root: 프로그램을 실행할 사용자를 지정합니다.
  • redirect_stderr=true: stderr를 stdout으로 리디렉션합니다.
  • stdout_logfile=/home/centos/mall/queue-worker.log: stdout 파일에 기록합니다. 경우에는 /home/centos/mall/queue-worker.log 파일에 기록합니다.

5. 슈퍼바이저 명령어를 사용

sudo supervisorctl status 실행중인 프로세스 확인

sudo supervisorctl start <processname> = laravel-worker 

sudo supervisorctl stop <processname>  = laravel-worker 

sudo supervisorctl restart  <processname> = laravel-worker

sudo supervisorctl reread 슈퍼바이저 구성 파일을 다시 읽고 새 프로그램 추가

sudo supervisorctl update 변경된 구성 파일을 적용

 

[root@DEPS-API supervisord.d]# sudo supervisorctl status
laravel-worker:laravel-worker_00   RUNNING   pid 123940, uptime 1:11:07

 

잘작동되고 있는게 보입니다!

 

그럼 모두 즐코 하세요~

 

 

[출처] chatgpt

반응형
Comments