2011-10-01 22 views
18

複数のスクリプト(5つのスクリプト)をcmdで実行する必要があります。最初のスクリプトが終了するまで2番目のスクリプトを開始しない限り確認します。したがって、最初のスクリプトが 現在、私は、私はこれらのスクリプトを非同期に実行考えるこのPHPで同期してシェルコマンドを実行する方法

exec ("php phpscript1.php "); 
exec ("php phpscript2.php "); 
exec ("php phpscript3.php "); 
exec ("php phpscript4.php "); 
exec ("php phpscript5.php "); 

を行うためにどんな提案でみんなを次のコードを使用しています。これらのスクリプトように...のみ第二第3一つである必要がありますというように、その後の完了後同期して実行できます。

+1

あなたは「cmdを経由して」と言うとき、あなたは、Windowsのコマンドプロンプトを使用して意味だか、など、zshの、shのは、bashのようなシェルを使用していますか? – Michael

+0

私は、彼らが非同期に*現時点では実行していないことをかなり確信しています。それらは相次いで実行され、「同期」と呼ばれます。 –

+0

窓を使わずにシェルを使用しています – Rahul

答えて

50

PHP execは、文字列の最後に&を使用してプログラムをバックグラウンドで実行しない限り、呼び出されたプログラムの実行が終了するまで待ってから次の行を処理します。

+1

あなたは私を不要な実験から救って、私はあなたに敬礼します。 –

+0

@stivlo:コマンドは別のクライアントから実行されているかどうか尋ねたい2つのクライアントPCから同時に起動されると、最初の1つが終了するまでexecを停止したい(並列実行をサポートしていない他のハードウェアプログラムを実行している私のexec) – mokNathal

7

私があなたに合ったら、PHPスクリプトの中からPHPスクリプトを実行しています。

通常、phpは次の行を処理する前にexec ("php phpscript1.php");の実行が完了するのを待ちます。

これを避けるには、出力を/dev/nullまたはファイルにリダイレクトし、バックグラウンドで実行してください。

たとえば、exec ("php phpscript1.php >/dev/null 2>&1 &");です。

+1

@ Bill'o:あなたの編集が無効です。あなたのコードは '/ dev/null'を引数としてPHPスクリプトに渡しますが、リダイレクトは行いません。 – Dennis

+0

確かに私の間違い、私はあまりにも速く入力しました –

4

php.netのexec関数の構文をご覧ください。 execは、デフォルトでは何も非同期に実行されません。

execには、2つの他のパラメータがあります。 3番目のスクリプトreturn_varは、スクリプトが正常に実行された場合や例外が発生した場合のヒントを提供します。この変数を使用して、後続のスクリプトを実行できるかどうかを確認できます。

テストして、問題がないかどうかをGoogleにお知らせください。