2009-08-12 21 views
5

日付が同じであれば、更新クエリを実行してステータス(プロジェクトテーブルのフィールド)を「開く」から「閉じる」に変更する必要があります。cronジョブやPHPスケジューラ

私は、cronジョブが最善の方法であるか、私はトリガを使用することができますか、私は私のウェブサーバとしてApacheを使用していますelse.Also何かをすることができ、私のOSがWindows Vistaの場合は本当にわかりません。

これを行う最良の方法はどれですか? PHPスケジューラーまたはcronジョブまたは他の方法?誰でも私を啓発できますか?

+1

危険なほどhttp://stackoverflow.com/questions/1263237/cronjob-trigger-which-can-update-the-database-everydayに似ています - 彼はスケジュールされたタスクを使用すべきかどうか、またはデータベースの内部スケジューラ – gnarf

+0

またkaushik - あなたはどのバージョンのmysqlサーバを持っていますか? – gnarf

答えて

1

私はいつも関連するスケジューリングのためにcronジョブに行きます。

ビッグボーナスポイントは、あなたが同様の情報をエコーすることができ、それはのは、あなたにメールで受け取るということです。

あなたはcronジョブを使用し始めると、それが停止するのは難しいでしょう。

+0

しかし、それはWebサイト上で行われていますか?クーロンジョブの助けを借りて商業ウェブサイトのようにしていますか? cronの仕事はそこに一番いい方法ですか?ホストを変更することができ、ホストを変更するたびに設定する必要があるかもしれないからです。 –

+1

あなたはそれをホスト上のシェルアカウントから行う必要があります。 WebサーバーにSSHをインストールして、実行するPHPファイルを特定したら、crontab -e と入力してコマンドを追加してください。つまり、 */5 * * * */usr/bin/php/home/youraccount/website/file.php 5分ごとに実行する必要があります。検索crontabジェネレータのgoogleと彼らはあなたのタイミングを微調整し、あなたのためのコマンド文字列を生成するのに役立ちます。 PHPSchedulerについては のcrontab -l> myct.​​txt 、新しいサーバー上で、私はそれがcrontabファイル

1

cronはそれ自体がVistaではありませんが、存在するのは、phpファイルを実行する "php -q -f myfile.php"のようなコマンドラインで実行できる標準のWindowsスケジューリングマネージャです与えられた時間に。

また、cronプログラムのポートを使用することもできますが、そこには多くのものがあります。

、第2には重要ではない場合、任意のWindowsスケジューリング・アプリケーションが行います、あなたに簡単にするためにあなたのPATH変数にPHPのbinパスを持っているようにしてください。

0

PHPscheduler..Rについては、cronjobsよりも優れていませんか?私はcronsがアプリケーションから独立していると思うので、もしホストを変更しなければならないのは難しいだろう。本当に確かではない。だれかがこれについてコメントできるなら、素晴らしいだろう!ありがとう!

4

あなたのコンセプトを変更する必要があると思います。

PHPはジョブをスケジュールすることはできませんし、MySQLはどちらもできません。 MySQLのトリガは、特定の時刻ではなく、mysqlクエリが発生したときに実行されます。いずれも

この制限は通常、Web開発では問題ありません。理由は、PHPアプリケーションがすべてのデータの入出力を制御する必要があるためです。通常、これはデータやその他の形式をユーザーや他のプログラムに表示するHTMLを意味します。

この場合、このように考えることができます。期限は設定された日付です。それをデータとして扱い、データベースに保存することができます。デッドラインが発生してもそれが重要ではない場合は、データベースに送信したデータが正しく表示されます。

締め切り日が過去であるかどうかを確認してから、プロジェクトが終了したことを表示するか、プロジェクトが終了したことを表示する直前に更新してください。

PHPアプリケーションとは独立してデータを更新する理由はありません。

は通常、スケジュールする唯一のものは、負荷の面で、あなたのアプリケーションに影響を与える仕事、または一度だけ行われることが必要であるか、あるいは同時実行や時間が問題です。

あなたの場合は該当しません。

PS:私はPHPschedulerを試していませんが、実際のスケジューラではないと思います。 Cronは、与えられたタスクがそのキューで期限切れになるまでスリープし、タスクを実行し、次のものが期限切れになるまでスリープするデーモンです(少なくとも現在のアルゴリズムでは何をするか)。 PHPは特別な設定として、ソケットとフォークの拡張がなければそれを行うことができません。したがって、PHPスケジューラは、(PHPがページを実行するたびに)ウェブページの各ロード時に、タスクの日付が期限切れになったかどうかをチェックするだけです。これは、PHPSchedulerのオーバーヘッドなしで、プロジェクトの日付が期限切れになっているかどうかを確認するだけでは変わりません。

+0

: あなたがホスト間で換え等のcrontabを保存する必要があります正常に動作するには、定期的にジョブをチェックするためにスケジューラを起動する必要があります。これは、アクティブなページにコードを配置することによって行われます。したがって、1時間に1ページのビューが表示される場合は、ジョブを毎時実行するようにスケジューリングできますが、細かくはスケジュールできません。私が批判的な仕事にお勧めする解決策ではありません。 – DavidScherer

1

Windows CRONジョブの場合、私はPyCronを十分にお勧めできません。

+0

+1:私はあまりにもうまくいった。 –

0

CRONとWindowsスケジュールタスクは、ジョブ/タスクを定期的に実行するようにスケジューリングする実際の方法ですが、CRON/Windowsで別のスケジュールタスクを実行することは面倒なケースがあります。つまり、ユーザが実行するようにスケジュールをつけたい場合や、シンプルさ/保守性/移植性/などを好む場合や上記のすべてを希望する場合。

スケジュールされたタスクにCRON/Windowsを使用したくない場合は、タスクスケジューリングシステムをアプリケーションに組み込みます。これには依然として1 CRONジョブまたはWindowsタスクのスケジュールが必要です。このアイデアは、ジョブの詳細をデータベースに格納することです(ジョブ名、ジョブのプロパティ、最終実行時間、実行間隔、実装にとって重要なその他のもの)。その後、他のすべてのジョブを実行するCRONまたはWindowsで「マスター」ジョブをスケジュールします。最低限の間隔でこのマスタージョブを実行する必要があります。毎分実行するジョブをスケジュールできるようにするには、マスタージョブを毎分実行する必要があります。

最小限の労力で、スケジュールされた各ジョブをPHPからバックグラウンドで起動できます(必要な場合)。メモリが制約されたシステムでは、monitor memory usageまたはPID(さまざまな方法)を追跡し、与えられた時刻に実行中のジョブをNに制限することができます。

私はこの方法で成功しましたが、YMMVはニーズと実装に基づいています。