2017-03-09 8 views
1

私は現在かなり複雑なPHP5/Symfony 2.8プロジェクトに取り組んでいます。このプロジェクトでは、コンソールで手動でCrontabで呼び出すことができるコマンドがあります。または、外部サイトのWebサービスを呼び出すために使用されるWebサイトのボタンを使用して、xmlファイルを管理しますSimpleXMLを使用してデータベースにインポートします。私のプロダクト環境で非同期プロセスが動作しないようです

コマンドには関係なく、それが呼び出されたか、私の地元のdevの環境に魔法のように動作しません。

しかし、(私はここに投稿してる理由です)未知の理由のために、外部サーバ上に配置されている私のintやprodの環境上、機能していないサイト上のボタンからコマンドを呼び出します。

私のボタンは、このアクションをトリガされます。

$process = new Process('php '.$kernelRootDir.'/console my:super:command'); 
$process->start(); 

コマンドはちょっと重いです、私は私がPROCESS-を使用している理由である、コマンドが完了するのを待つ余裕がない>という開始実行より。私はログを必要としていないので、ユーザーが別のページに行くことができる間にコマンドを起動して実行させても問題ありません。

そして再び、これは私のローカル環境(Debianの7 VM)上ではなく、遠くのサーバー(それが使用しているかわからない)上で素晴らしい作品。しかし、コンソールからコマンドを手動で起動するか、crontabに呼び出させると、最後まで完全に実行されます。それは私のコントローラーからプロセスを介して機能しないトリガーです。

これは昨日から私の頭をオフ私の髪を引っ張っているが、コマンドも..任意のヒントprod環境で起動していない理由を私は理解できませんか?

アップデート:私のコマンドは、小さな「それは働いていた」というメッセージをダンプし、私のコントローラでの結果を得るために待つ()およびgetOutput()メソッドを使用して作ってみました。私のローカル環境では、ダンプ/ダイコンボを使用してコントローラから結果として即座にメッセージを受け取りました。遠いサーバーで、私のコマンドはProcessTimedOutExceptionをトリガーします:プロセスが60秒のタイムアウトを超えました。

実際にプロセスがカスタムコマンドを起動できないという問題がありますが、このコマンドはコンソールで手動で呼び出すと機能します。

答えて

0

さて、2日以来、苦労した後、私は遠くのサーバがこのの責任であるかもしれないことを発見し、それは私がプロセスの答えを待っていない場合は、そのプロセスを即死されているようです。私はなぜ、私は方法が分からないが、それはそうであるように思われる。

私はProcessを使用していない代替ソリューションを探し始めました。そして私は何かを見つけた。

exec('php '.$kernelRootDir.'/console my:super:command > /dev/null &'); 
//Apparently, using "&" launch the command asynchronously. 

すべての私のテストはこれまでのところ、私の本番サーバー上で作業してきたので、私はそれをしておこう:私はそうすることにより、非同期呼び出しを起動するためのPHPのexec()メソッドを使用することができます。

関連する問題