PHP, Docker - PCNTL(Process Control Extensions) 활성화 방법
라라벨 버전 : 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
Reference
이 문제에 관하여(PHP, Docker - PCNTL(Process Control Extensions) 활성화 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kakisoft/php-docker-how-to-enable-pcntlprocess-control-extensions-1afk텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)