PHP, Docker - PCNTL(Process Control Extensions) 활성화 방법

5230 단어 phplaravelpcntldocker
환경
라라벨 버전 : 8.16.1
PHP 버전 : 7.4.7

Laravel의 특정 기능을 사용하기 위해 PCNTL(Process Control Extensions)이 필요한 경우가 있습니다.

(PHP: PCNTL - 매뉴얼)
https://www.php.net/manual/en/book.pcntl.php

예를 들어 Laravel에서 작업 실행 제한 시간을 지정하려면 이 기능을 활성화해야 합니다.

다음 구성 및 소스 코드는 제한 시간이 설정되었음을 보여줍니다.
(X초 후에 오류로 작업이 종료되도록 설정할 수 있습니다.)

두 가지 방법이 있습니다.
하나는 작업을 실행할 때 artisan 명령에서 지정하는 것이고, 다른 하나는 소스 코드에 작성하는 것입니다.

artisan 명령어 사용시 아래와 같습니다.

php artisan queue:listen --timeout=30


소스코드 작성시 아래와 같습니다.

namespace App\Jobs;

class ProcessPodcast implements ShouldQueue
{
    /**
     * The number of second that the job can execute until timeout period.
     *
     * @var int
     */
    public $timeout = 120;
}


여담이지만 둘 다 사용하는 경우 소스 코드 값이 우선합니다.

즉, 위의 예의 경우 120초 후에 시간 초과됩니다.

단, 이 기능을 사용하려면 위에서 설명한 대로 PCNTL(Process Control Extensions)을 활성화해야 합니다. 그렇지 않으면 타임아웃 기간은 기본적으로 60초가 됩니다.

자세한 내용은 링크를 참조하십시오.
https://laravel.com/docs/8.x/queues#timeout

해당 기능을 어떻게 활성화합니까? 그것을 살펴보면 "Please compile PHP"를 찾을 수 있습니다.
그것은 당신을 낙담시킬 것입니다.
https://www.php.net/manual/en/pcntl.installation.php

PHP 공식

Process Control support in PHP is not enabled by default. You have to compile the CGI or CLI version of PHP with --enable-pcntl configuration option when compiling PHP to enable Process Control support.



스택 오버플로
How to enable pcntl in php ( while using a framework like Symfony2 )
How to enable PCNTL on Ubuntu server 16.04 - Stack Overflow

Docker 개발자에게는 벅찬 작업입니다.

그러나 PHP를 다시 컴파일하지 않고 Dockerfile을 편집하여 PCNTL(프로세스 제어 기능)을 활성화할 수 있습니다.

구체적으로 다음 구문을 추가합니다.

Docker 이미지는 공식 php-fpm 배포판을 사용하도록 설계되었습니다.

RUN docker-php-ext-configure pcntl --enable-pcntl \
  && docker-php-ext-install \
    pcntl


Dockerfile 편집의 예.

FROM php:7.4.11-fpm

# install composer
RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer
RUN apt-get update \
&& apt-get install -y \
git \
zip \
unzip \
vim

RUN apt-get update \
    && apt-get install -y libpq-dev \
    && docker-php-ext-install pdo_mysql pdo_pgsql

RUN docker-php-ext-configure pcntl --enable-pcntl \
  && docker-php-ext-install \
    pcntl

WORKDIR /var/www/html


Docker-composer를 사용하는 경우 "docker-compose up -d --build"와 같은 명령으로 다시 빌드합니다.

pcntl이 활성화되었는지 확인하려면 컨테이너에 로그인한 후 다음 명령을 사용하십시오.

php -i | grep pcntl


다음 메시지가 표시되면 pcntl이 활성화된 것입니다.

pcntl support => enabled


php 명령 옵션은 아래를 참조하십시오.
PHP: Options - Manual

좋은 웹페이지 즐겨찾기