2014-10-28 4 views
0

gearman 및 해당 pecl php 확장자를 성공적으로 구성하고 사용했습니다. 백그라운드에서 긴 SQL 쿼리와 관련하여 긴 프로세스를 실행하는 데 사용하고 있습니다. 세부 사항이 도움이된다면 Yii btw를 사용하고 있습니다. 당신은 내가 과정을 볼 것이 아니라 수 있도록 내가하는 그놈 터미널 먼저 실행 통지하는 경우gearman php에서 작업자 시작 및 중지

:

public function actionProcessWithGearman(){ 

$output = shell_exec('gnome-terminal -e "php workers/worker.php" > /dev/null 2>/dev/null &'); 


$client = new GearmanClient(); 
$client->addServer(); 
$result = $client->doBackground('executeJob',//parameters); 

} 

일부 세부 정보 : 여기

내가 그것을 사용하는 방법 php 명령으로 직접 이동하려면 /dev/null도 추가해야합니다.이므로 더 이상 응답을 기다리지 않습니다. 그리고 나서 노동자는 깨어나 직장을 운영합니다.

문제 :

이 작업은 여러 번 실행하거나 다른 클라이언트에서 여러 사용자에 의해 실행, 그 결과, 다수의 단말기가 worker.php가 인스턴스화되고 실행 때 내 문제가 발생한다.

명의 근로자는 어떻게 하나일까요? 다른 클라이언트의 여러 사용자에 대해 여러 명의 작업자가있을 수 있더라도 작업이 완료 될 때마다 어떻게 작업자를 닫을 수 있습니까?

답변

1

.

대기열 시스템 논리에 대한 오해가 있다고 생각합니다. 작업자가 처리 할 새 작업을 추가하고 작업을 수행하려면 작업자를 시작하지 않아야합니다.

Gearman은 일반적으로 관리자와 잘 어울립니다. 관리자는 작업자를 통제하고 언제나 사용할 수 있는지 확인합니다. 동시에 두 개 이상의 작업을 실행해야하는 경우 항상 새 작업자를 추가 할 수 있습니다.

gearman + supervisor + php를 찾으려면 설정 방법을 설명하는 기사가 많이 있습니다.

0

PHP 프로세스를 돌보는 슈퍼 바이저에게 실행 및 모니터링을 맡기는 것이 좋습니다.

이 접근법은 몇 가지 장점이 있습니다. 예를 들어 감독자는 자동으로 여러 명의 인스턴스를 시작할 수 있습니다. 당신이 당신의 자신의 웹 인터페이스에서 노동자를 관리하는 것을 선호한다면 당신도 (http://supervisord.org/api.html)

샘플 supervisord의 conf, XMLRPC를 통해 supervisord 프로세스를 제어 할 수 있습니다

[program:worker_development] 
process_name=worker_%(process_num)s 
command=php worker.php 
directory=/var/ww/myproject 
autorestart=true 
user=ubuntu 
redirect_stderr=false 
numprocs=2 
startretries=5