URLからいくつかのパラメータを取り込んで、execコマンドを実行して、execの結果を表示したいと思っています。この実行コマンドは約20〜30秒かかります。それはWebページがちょうどnginx 502の悪いゲートウェイエラー(タイムアウト)を取得するため、完了しません..長い間、接続をハングアップさせる悪い習慣として、nginxタイムアウトエラーを拡張するのではなく、私はバックでPHPのexecをそれが完了した後にページに戻ってきたのですか? またはPHPを使用せずにこれを達成する良い方法はありますか?PHPはexecが終了するのを待って結果を出力します
2
A
答えて
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
私は以前と同様のタスクを完了しました。正解です。 –
関連する問題
- 1. メソッドを終了する前にコールバックの結果を待つ
- 2. HttpSendRequestはPHPスクリプトの終了を待っていません
- 3. bashの結果をexecを使ってPHPに戻す
- 4. AJAXの結果はクエリが終了するのを待たない
- 5. PHP検索コードが結果の結果を出力しない
- 6. プログラムが終了すると `exec`でプロセスを終了する
- 7. 入力が終了するのを待ってからテキストボックスを読み取る
- 8. PHP shell_execスクリプトが終了するのを待ちますか?
- 9. PHP exec()の実行コマンドを終了するには?
- 10. PHP終了とまだ出力バッファ
- 11. Reduxのアクションがディスパッチ終了するのを待って
- 12. pthread_cancelが終了するのを待って
- 13. イベントが終了するのを待って
- 14. プログラムは最終的な結果を出力しません
- 15. 結果バックエンドなしでセロリタスクが完了するまで待つ
- 16. VBScriptは一見Excelマクロが終了するのを待っていますか?
- 17. Popen.communicate()は、スクリプトの出力結果があっても(None、None)を返します。
- 18. Android:ttsが終了するまで待ってから続行
- 19. APIコールがJavascriptで終了するまで待ってから
- 20. PHP exec()を使用してライブ出力しますか?
- 21. Botフレームワーク:値を待ってからメソッドが終了する
- 22. プロセスがフォークして終了すると、[exec]プロセスはゾンビを去ります
- 23. 非同期呼び出しが終了するまで待つ -
- 24. vimはプログラムが終了して順序が狂ったときにのみ印刷結果を返します
- 25. エグザムが終了するのをkafkaストリーミングドライバが待っていますか?
- 26. Pythonはサブプロセスが終了するのを待っていませんか?
- 27. サービスangularjsは、succes関数が終了するのを待っていません。
- 28. doInTheBackgroundは機能が終了するのを待っていませんか?
- 29. PHP Execの:待たずに、出力を廃棄することなく、nohupを
- 30. JavaScript:特定の時間の終了を待っています
あなたは、この特定のスクリプトが長時間実行されていることをnginxに伝えなければならないので、タイムアウトにはなりません。 –
詳細と例をご紹介します。私の最初の考えは、ウェブページの表示のためにcronジョブとキャッシュが必要なことです。 – Machavity
@MarcBどうすればこのスクリプトをnginxでシングルアウトし、タイムアウトしないように伝えることができますか?私は成功していないnginxとphp-fpm confでさまざまな設定を試みました。 – pete