Laravel 애플리케이션을 개발할 때는 종종 장인 명령을 사용하여 다양한 작업을 수행합니다. Artisan Command는 Laravel Framework에서 제공하는 매우 강력한 명령 줄 도구입니다. 개발자는 데이터베이스 마이그레이션, 대기열 처리, 타이밍 작업 등과 같은 많은 작업의 실행을 단순화하는 데 도움이됩니다.
그러나 장기적인 장인 명령을 실행할 때 백그라운드에서 동시에 여러 명령이 실행될 수 있습니다. 이러한 프로세스를 구별하기 위해, 특히 HTOP 또는 PS 명령과 같은 프로세스 모니터링 도구를 사용할 때 각 프로세스에 대해 쉽게 인식 할 수있는 동적 프로세스 제목을 설정할 수 있기를 원합니다. 다행히도 PHP의 CLI_GET_PROCESS_TITLE 기능을 통해이를 달성 할 수 있습니다.
이 기사에서는 Laravel Artisan 명령에 CLI_GET_PROCESS_TITLE 기능을 기반으로 동적 프로세스 제목을 추가하여 명령 줄 인터페이스에서 다른 프로세스를보다 쉽게보고 식별 할 수 있도록하는 방법을 살펴 봅니다.
cli_get_process_title 은 현재 PHP 프로세스의 제목을 얻는 PHP 함수입니다. 운영 체제에서 현재 프로세스의 표시 이름을 나타내는 문자열을 반환합니다. 이 제목을 수정하여 프로세스에 명령 줄 인터페이스에보다 설명적인 이름을 표시하여 프로세스를 더 잘 관리하고 모니터링 할 수 있습니다.
기본적으로 PHP 프로세스의 제목은 일반적으로 "PHP"또는 유사한 일반 식별자이지만 CLI_GET_PROCESS_TITLE을 사용하면 현재 실행중인 Laravel Artisan 명령과 같은 인식 가능한 이름으로 변경할 수 있습니다.
Laravel의 Artisan 명령에 대한 동적 프로세스 제목을 설정하려면 명령 실행 중에 프로세스 제목을 수정해야합니다. 간단한 단계 가이드는 다음과 같습니다.
먼저, 우리는 맞춤형 장인 명령을 만들어야합니다. 실행하여 새로운 장인 명령을 만들 수 있습니다.
<span><span>php artisan make:</span><span><span class="hljs-built_in">command</span></span><span> SetProcessTitleCommand
</span></span>
앱/콘솔/명령 디렉토리에서 새 명령 클래스 파일 SetProcessTitleCommand.php가 생성됩니다.
다음으로 명령 클래스에서 cli_set_process_title 함수를 사용하여 프로세스 제목을 설정해야합니다. setProcessTitleCommand.php 파일을 열고 핸들 메소드에 코드를 추가하여 프로세스 제목을 동적으로 설정하십시오.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-keyword">namespace</span></span><span> </span><span><span class="hljs-title class_">App</span></span><span>\</span><span><span class="hljs-title class_">Console</span></span><span>\</span><span><span class="hljs-title class_">Commands</span></span><span>;
</span><span><span class="hljs-keyword">use</span></span><span> </span><span><span class="hljs-title">Illuminate</span></span><span>\</span><span><span class="hljs-title">Console</span></span><span>\</span><span><span class="hljs-title">Command</span></span><span>;
</span><span><span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span> </span><span><span class="hljs-title">SetProcessTitleCommand</span></span><span> </span><span><span class="hljs-keyword">extends</span></span><span> </span><span><span class="hljs-title">Command</span></span><span>
{
</span><span><span class="hljs-comment">// 명령의 이름</span></span><span>
</span><span><span class="hljs-keyword">protected</span></span><span> </span><span><span class="hljs-variable">$signature</span></span><span> = </span><span><span class="hljs-string">'set:process-title {title}'</span></span><span>;
</span><span><span class="hljs-comment">// 명령에 대한 설명</span></span><span>
</span><span><span class="hljs-keyword">protected</span></span><span> </span><span><span class="hljs-variable">$description</span></span><span> = </span><span><span class="hljs-string">'현재 프로세스의 제목을 설정하십시오'</span></span><span>;
</span><span><span class="hljs-comment">// 명령을 실행하는 방법</span></span><span>
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">handle</span></span><span>(</span><span><span class="hljs-params"></span></span><span>)
{
</span><span><span class="hljs-comment">// 명령 줄 매개 변수를 얻습니다</span></span><span>
</span><span><span class="hljs-variable">$title</span></span><span> = </span><span><span class="hljs-variable language_">$this</span></span><span>-></span><span><span class="hljs-title function_ invoke__">argument</span></span><span>(</span><span><span class="hljs-string">'title'</span></span><span>);
</span><span><span class="hljs-comment">// 사용cli_set_process_title프로세스 제목을 설정하십시오</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">function_exists</span></span><span>(</span><span><span class="hljs-string">'cli_set_process_title'</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">cli_set_process_title</span></span><span>(</span><span><span class="hljs-variable">$title</span></span><span>);
</span><span><span class="hljs-variable language_">$this</span></span><span>-></span><span><span class="hljs-title function_ invoke__">info</span></span><span>(</span><span><span class="hljs-string">"프로세스 제목이 설정되었습니다: <span class="hljs-subst">$title</span></span></span><span>");
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-variable language_">$this</span></span><span>-></span><span><span class="hljs-title function_ invoke__">error</span></span><span>(</span><span><span class="hljs-string">'현재의PHP버전은 지원되지 않습니다cli_set_process_title기능'</span></span><span>);
}
}
}
</span></span>
위 코드에서는 다음을 수행했습니다.
새로운 장인 명령 세트 : 프로세스 타이틀이 생성되며, 이는 명령 줄 매개 변수 제목을 수용하며 프로세스에 대해 설정하려는 제목입니다.
핸들 메소드에서는 cli_set_process_title을 사용하여 프로세스 제목을 동적으로 설정합니다.
CLI_SET_PROCESS_TITLE 기능을 사용할 수 없으면 (예 : PHP 환경 에서이 기능을 지원하지 않음), 사용자는 현재 환경이 기능을 지원하지 않음을 프롬프트합니다.
그런 다음이 새 명령을 앱/콘솔/kernel.php 파일에 등록해야합니다. $ commands array에서 새 명령에 대한 참조를 추가하십시오.
<span><span><span class="hljs-keyword">protected</span></span><span> </span><span><span class="hljs-variable">$commands</span></span><span> = [
</span><span><span class="hljs-title class_">Commands\SetProcessTitleCommand</span></span><span>::</span><span><span class="hljs-variable language_">class</span></span><span>,
];
</span></span>
이제 다음 명령을 실행하여 프로세스 제목의 설정을 테스트 할 수 있습니다.
<span><span>php artisan </span><span><span class="hljs-built_in">set</span></span><span>:process-title </span><span><span class="hljs-string">"My Custom Process Title"</span></span><span>
</span></span>
모든 것이 제대로 작동하면 시스템의 PS 명령 또는 유사한 도구를 통해 프로세스 제목을 볼 수 있습니다. 프로세스 제목이 " 내 사용자 지정 프로세스 제목 "으로 성공적으로 설정되었음을 확인할 수 있어야합니다.
장기 실행 명령으로 프로세스 제목을 동적으로 업데이트 해야하는 경우 명령 실행 중에 CLI_SET_PROCESS_TITLE을 주기적으로 호출 할 수 있습니다. 예를 들어, 작업 대기열을 처리 할 때 현재 처리 된 작업에 따라 프로세스 제목을 동적으로 업데이트 할 수 있습니다.
다음은 장기 실행 명령을 실행할 때 프로세스 제목을 동적으로 업데이트하는 방법을 보여주는 예입니다.
<span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">handle</span></span><span>(</span><span><span class="hljs-params"></span></span><span>)
{
</span><span><span class="hljs-variable">$tasks</span></span><span> = </span><span><span class="hljs-variable language_">$this</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getTasks</span></span><span>(); </span><span><span class="hljs-comment">// 일련의 작업을 받고 있다고 가정 해 봅시다</span></span><span>
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$tasks</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$index</span></span><span> => </span><span><span class="hljs-variable">$task</span></span><span>) {
</span><span><span class="hljs-variable">$title</span></span><span> = </span><span><span class="hljs-string">"작업을 처리합니다 <span class="hljs-subst">$index</span></span></span><span> / " . </span><span><span class="hljs-title function_ invoke__">count</span></span><span>(</span><span><span class="hljs-variable">$tasks</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">function_exists</span></span><span>(</span><span><span class="hljs-string">'cli_set_process_title'</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">cli_set_process_title</span></span><span>(</span><span><span class="hljs-variable">$title</span></span><span>);
}
</span><span><span class="hljs-comment">// 작업을 처리합니다</span></span><span>
</span><span><span class="hljs-variable language_">$this</span></span><span>-></span><span><span class="hljs-title function_ invoke__">processTask</span></span><span>(</span><span><span class="hljs-variable">$task</span></span><span>);
</span><span><span class="hljs-comment">// 효과를 표시합니다,여기에서 각 작업의 처리 시간을 시뮬레이션 해 봅시다</span></span><span>
</span><span><span class="hljs-title function_ invoke__">sleep</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>);
}
}
</span></span>
위의 코드에서 명령은 작업 세트를 통과하고 각 작업이 처리 될 때 프로세스 제목을 동적으로 업데이트합니다. 이러한 방식으로, 현재 프로세스의 상태를 명령 줄에서 실시간으로 볼 수 있습니다.
cli_get_process_title 및 cli_set_process_title 함수를 통해 Laravel Artisan 명령에 대한 동적 프로세스 제목을 설정할 수 있습니다. 이는 명령 줄에서 여러 배경 프로세스를 실행할 때, 특히 개발 및 생산 환경에서 장기 실행 명령을 사용할 때 다양한 프로세스를 차별화하는 데 매우 도움이됩니다.
CLI_SET_PROCESS_TITLE 기능이 모든 PHP 버전에서 지원되지는 않지만 프로세스 관리 및 모니터링이 필요한 개발자에게는 매우 유용한 도구입니다. 이 기사가 Laravel 프로젝트 에서이 기능을 구현하여 작업 효율성 및 시스템 관리 경험을 향상시키는 데 도움이되기를 바랍니다.