2016-08-28 2 views
0

현재 Webhook에서 직접 호출하는 PHP 스크립트가 있습니다. webhook 메소드는 지난 주까지 요청 량이 API 속도 한계에 대해 문제가되는 시점까지는 괜찮 았습니다.프로세스가 완료되었는지 확인하는 방법은 무엇입니까?

내가 시도한 것은 두 번째 PHP 파일 ($path/webhook-receiver.php)을 실행중인 프로세스가 없을 때만 webhooks가 호출하도록하는 것입니다. 나는 호출 된 스크립트 ($path/event-finance-reporting.php)에있는 프로세스 사용자 webb 권장을 사용하여 첫 번째 작업으로 파일을 만들고 마지막 exection으로 해당 파일을 삭제합니다.

스크립트를 호출하기 전에 자동화는 디렉토리가 비어 있는지 확인합니다. 그렇지 않으면 현재 작업이 완료 될 때까지 기다렸다가 다른 작업을 제출할 때까지 기다리는 오류를 사용자에게 알려줍니다.

지금 실행 해요 문제는 모두 $command1$command2'. both end up invoking the $ 경로 /은 webhook-reciever.php instead of $ 경로/이벤트 금융 reporting.php` 그.

$command1 = "php -f $path/event-finance-reporting.php 123456789"; 
$command2 = "/usr/bin/php -q -f $path/event-finance-reporting.php 123456789"; 

누구나 알 수 있습니까?

+0

'$ command = "php -i";를 테스트와 같이 넣으면 어떻게 될까요? –

+0

'>/dev/null &'을 그대로두면 아무것도하지 않습니다. 나는 그것을 가져 가면 영원히 돌아 가지 만 아무것도 표시하지 않습니다. "php -i"는 무엇을합니까? – JakeMWP

+0

'php -i'는'php_info();'와 같은 bash입니다. 나는 그것을 테스트했다. (https://gist.github.com/anonymous/6d3d36a494ba5da916af7dedd14a551a) PID를 성공적으로 리턴했다. 내가 믿는 문제는'$ pids'를'$ execute_response'로 대체해야한다는 것입니다. –

답변

1

event-finance-reporting.php 인스턴스를 한 번에 하나만 실행하는 것이 목표입니다. 한 가지 전략은

$lockfilepath = '.../event-finance-reporting.lock'; 
if(file_exists($lockfilepath)){ 
    print("try again later"); 
    exit(); 
} 
touch($lockfilepath); 
... 
// event-finance-reporting.php code 
... 
unlink($lockfilepath); 

당신은 또한 나이를 확인으로 if에서 더 복잡한 무언가를 할 수있는, : 예를 들어, 존재하는 경우 실행하지 않는, 독특한 잠금 파일을 만들고,이 끝난 때를 삭제하는 것입니다 잠시 후에 추락 된 인스턴스 event-finance-reporting.php에 의해 잠긴 뒤에 삭제 된 경우이를 삭제하고 무시합니다.

이 전략을 사용하면 두 개의 별도 php이 필요하지 않습니다.

+1

이제 너무 똑똑합니다. 고마워요. 그리고 이것은 정확히 구현할 것입니다. – JakeMWP

+0

당신은 환영합니다 :) – webb

+0

위의 두 명령을 모두 '$ execute_response'로 사용하면 'event-finance-reporting.php'를 실행하는 대신 Webhook 수신기를 계속 실행하는 것처럼 보일 수 있습니까? – JakeMWP

관련 문제