2016-11-09 7 views
0

私は自分のPHPプロジェクトでいくつかのバックグラウンドタスクを持っています。それはいくつかの条件が満たされている場合、いくつかの仕事をします。たとえば、まだ発注されていない発注があり、発注見積もり時間が15分未満の場合、システムは宅配業者に彼がおそらく遅れていることを通知します。バックグラウンドphpタスク、cronの代替案

最も簡単な解決策 - 毎分PHPスクリプトを実行するcronタスクを作成する。そのスクリプトは、その条件をチェックし、条件が満たされた場合に通知を送信します。

もう1つの方法はキューです。私はギアマンとrabbitmqを見ましたが、私は別の用途のためにそれらを見ることができます。彼らはあなたが直接仕事を送るクライアントを持っている場合に適しています。私の場合、私はクライアントを持っていません。それはシステム内のちょっとした条件です。

私が考えた最後の解決策は、無限ループのカスタムPHPデーモンを書くことです。それぞれの反復で条件を確認し、満足して1分間眠ったらジョブを実行します。しかし、メモリリーク、デーモンの再起動などの問題が発生する可能性があります。

したがって、現代のPHPでこのプロンプラムに最適なソリューションは何ですか?

+0

PHPソリューションの場合は、通常のcronタスクを使用します。それ以外の場合は、スケジュールされたジョブを設定したり、アプリケーションから呼び出したりできるサードパーティオプションがあります。または、nodejsなどのサイドで実行される小さなキューアプリを作成するだけです。 – KungWaz

答えて

0

cronがあなたのために仕事をすることができれば、是非それを使用してください。仕事をしている実証済みのツールがあるときに、なぜホイールを改革するのですか?私はいくつかを書いた

while (1) { 
// run forever scripts 
} 

そしてエラーなしで何ヶ月も走った。単純なmysqlテーブルであるメッセージキューを処理しました。しかし、もしあなたがそうするなら、while (1)プロセス状態をチェックするcronジョブが必要です。プロセスが複数回起動されないようにロックする必要があります。

+0

私は2番目に、cronに行く。 –

0

cronjobを使いたくない場合は、デーモンを作成するのが最善の方法だと思います。私はPerlでコーディングが好きです。もし私があなたなら、私はPerlでデーモンを書くでしょう。

しかし、もし私がPHPでデーモンを書いていたら、私のPHPデーモンが動作しているかどうかをチェックし、実行していなければデーモンを再起動するcronjob(例えば10分間隔)で別のバックアップスクリプトを実行します。