PHP と MySQL で、ある人が別の人のためにタスクを実行するように割り当てられているサイトを作成しようとしています。タスクを完了するために割り当てられた時間は 72 時間です。
実行された場合、相手はそのことを確認します。そうでない場合は、特定のアクションを実行したい (アカウントをブロックする、メールを送信する、他の人にタスクを割り当てるなど)。これを行う最善の方法は何ですか?
カウントダウンは秒単位で実行されるため、毎秒スクリプトを実行する必要があると思います。
cronjob を使用して期限を確認し、最終的にメールを送信したり、アカウントをブロックしたりできます...
ただし、実際に 1 秒あたりの精度が必要な場合は、「無限」サイクルとその間のいくつかのスリープを含む単一のプロセスを使用することをお勧めします。
サーバーが *nix ファミリーの場合、cron/crontab を使用できます。http://en.wikipedia.org/wiki/Cronおよびhttps://help.ubuntu.com/community/CronHowtoで使用例を参照してください。
本当にすぐに起こらなければならないことはほとんどありません。何かが起こるのを72時間待っていた場合、数分以内にアクションが発生することはそれほど重要ではありません。
何かを本当に早く発生させたい場合で、発生する可能性のあるイベントの間隔が常に長い場合は、cronジョブを使用しないことをお勧めしますが、@mucが提案したものに似たものを使用します。これは定期的に実行されるスクリプトです。それを継続するシェルスクリプト内(スクリプトが終了するときにスクリプトを再実行するために、最後に「exec $ 0」を実行するだけです)。
データベースをチェックするスクリプト(たとえばPHP)も、常に実行されている必要はありません。数秒以上の時間内に発生する予定の何かを見つけると、次のイベントが発生するまでスリープします。ウェイクアップすると、それがまだ必要であることを再確認してから、関連するジョブを実行できます。
<?php
$jobId = whatToRunNext();
if (! $jobId) {
exit;
}
$secsToNextJob = howLongToNextJob($jobId);
if ($secsToNextJob > 0) {
sleep($secsToNextJob);
if (! jobStillRequired($jobId)) {
exit;
}
}
doJob($jobId);
exit;
それを実行し続けるシェルスクリプトでラップします。おそらくbashスクリプトで少しスリープすると、非常に長時間実行されるCPUキリングループに陥っていなくても問題ありません。
そのようなことをする必要がある場合は、おそらく次の手順を実行します。
イベントの作成と締め切りの計算
締め切り時刻に実行する cronjob を設定する
cronjob はイベントのステータスをチェックし、アクションを実行します
これが最も効率的な方法になると思います。
PHP と MySQL で、ある人が別の人のためにタスクを実行するように割り当てられているサイトを作成しようとしています。タスクを完了するために割り当てられた時間は 72 時間です。
これらは単に db vales である可能性があります
テーブルタスク
.id
.user_assigned
.strart_date
.end_date
.status
.desc
実行された場合、相手はそのことを確認します。そうでない場合は、特定のアクションを実行したい (アカウントをブロックする、メールを送信する、他の人にタスクを割り当てるなど)。これを行う最善の方法は何ですか?
これも、割り当てられたジョブのレイアウトを備えた何らかの形式の管理パネルです。「作業者」はジョブを「完了」として投稿する必要があり、「管理者」はこれを確認できます。これはすべて、データベース「table_task.status」の値を介して管理できます
カウントダウンは秒単位で実行されるため、毎秒スクリプトを実行する必要があると思います。^-- サーバーの自殺
cron を最大 1 時間実行します。1000 人のユーザーがいる場合。次に、このcronは毎秒1000回実行されます
1 時間で、これは 60000*60 です
時間を表示する必要がある場合は、何らかの形式の jQuery を使用します。多くの時計スクリプトがあります。