2016-09-22 5 views
2

URLからいくつかのパラメータを取り込んで、execコマンドを実行して、execの結果を表示したいと思っています。この実行コマンドは約20〜30秒かかります。それはWebページがちょうどnginx 502の悪いゲートウェイエラー(タイムアウト)を取得するため、完了しません..長い間、接続をハングアップさせる悪い習慣として、nginxタイムアウトエラーを拡張するのではなく、私はバックでPHPのexecをそれが完了した後にページに戻ってきたのですか? またはPHPを使用せずにこれを達成する良い方法はありますか?PHPはexecが終了するのを待って結果を出力します

+0

あなたは、この特定のスクリプトが長時間実行されていることをnginxに伝えなければならないので、タイムアウトにはなりません。 –

+0

詳細と例をご紹介します。私の最初の考えは、ウェブページの表示のためにcronジョブとキャッシュが必要なことです。 – Machavity

+0

@MarcBどうすればこのスクリプトをnginxでシングルアウトし、タイムアウトしないように伝えることができますか?私は成功していないnginxとphp-fpm confでさまざまな設定を試みました。 – pete

答えて

1

PHPがバックグラウンドで実行されるようにフォークされたスクリプトにexecをトリガーさせます(末尾は&)。ページは、元のスクリプトの状態をチェックするために、ajaxリクエストを介して定期的にサーバーをポーリングするいくつかのjを返します。スクリプトはSTDOUTとSTDERRを一意のファイルに出力して、ポーリングスクリプトがステータスを確認できるようにします。

編集:あなたが知る必要がある場合は、スクリプトの終了コードは、別のスクリプトでそれをラップ:./wrapper.sh someIdUniqueToClient &よう

#/bin/bash 
uniqId=$1 
yourscript $uniqId & 
myPid=$! 
echo $myPid > $uniqId'.pid' 
wait $myPid 
echo $? > $uniqId'.returned' 

コール。テストされていないが、あなたは要点を得る。

+0

私は以前と同様のタスクを完了しました。正解です。 –

関連する問題