MySQLを使用してPHPでAndroidアプリのWebサービスを作成しています。利用可能なデータがあるかどうかを継続的に確認したいと思います。バックグラウンドプロセスとしてデータを取得する方法がわかりません。リクエストなしで、またはファイルを呼び出さずにクエリを実行するにはどうすればよいですか?
私は検索して、次のようなコードを取得しました
$command = "php -d max_execution_time=50 -f myfile.php '".$param."' >/dev/null &";
exec($command);
しかし、このクエリが継続的に実行されるように、このコードをどこに配置する必要がありますか?
はい、アンパサンドトリックは機能します。supervisord
数時間ごとに再起動するようなものを使用して、メモリリークが処理されるようにすることができます。これにより、クラッシュしたりハングしたりした場合の脆弱性も低くなります。
また、cronのようなものを使用してタスクを10分間実行し、その後停止してcronが再開するのを待つことができます-ほとんどのバックグラウンドタスクでは、タスクの期間が短いかどうかは問題ではないことに注意してください追いつくので、実行されていません。前のタスクがまだ実行されているかどうかを各実行で確認し、実行されている場合は早期に終了することをお勧めします。そうすれば、データベースから作業を取得するときに競合状態を引き起こす2つのバックグラウンドタスクがなくなります。
最後に、Gearmanなどのジョブサーバーを使用できます。これにより、タスクを非同期で送信でき、ワーカータスクによって(時間または優先順位のいずれかで)実行されます。これはおそらく最も信頼できるアプローチですが、セットアップにはもう少し作業が必要です。このためのPHPモジュールがありますが、私の経験Net_Gearman
では、PEARで利用できるよりも使用するのが面倒です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加