2016-08-28 77 views
0

私は現在Webhookによって直接呼び出されているPHPスクリプトを持っています。 webhookメソッドは、リクエストの量がAPIのレート制限で問題になっている今週までうまくいきました。プロセスが完了したかどうかを確認するには?

私がやっていることは、プロセスが実行されていないときだけwebhooksによって呼び出される2番目のPHPファイル($path/webhook-receiver.php)を作成することです。私は、呼び出されたスクリプト($path/event-finance-reporting.php)にあるプロセスユーザーwebb推奨を使用して、最初のアクションとしてファイルを作成し、そのファイルを最後のセクションとして削除します。

スクリプトを呼び出す前に、オートメーションはディレクトリをチェックして空であることを確認します。そうでない場合は、現在のジョブが完了するまで別のジョブを実行するまでエラーを返します。

私は今に実行している問題は$command1$command2'. both end up invoking the $パス/ウェブフック-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のインスタンスを一度に1つだけ実行することを目標にしています。 1つの戦略は、あなたはまた、年齢を確認するよう、ifでより複雑な何かができる

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

,:例えば、それが存在する場合に実行し、それが終了したときにそれを削除しない、ユニークなロックファイルを作成することですしばらく前に墜落したevent-finance-reporting.phpのインスタンスによって置き去りにされていた場合は、それを削除して無視します。

この戦略では、2つの別個のphpも必要ありません。

+1

今はあまりにもスマートです。ありがとう、これは私が実装するものです。 – JakeMWP

+0

あなたは大歓迎です:) – webb

+0

'$ execute_response'の私の上記の両方のコマンドが、' event-finance-reporting.php'を実行する代わりにwebhookレシーバを何度も何度も実行しているようですか? – JakeMWP

関連する問題