(a) cronに1分毎に終了時刻をチェックして、該当データがあればAを起動する処理を登録。
(b) デーモンに常駐してDBを監視するようなプログラム
(c) その他
「指定時刻になるとAという処理」を行うのであれば、指定時刻を入れて cron を一度だけ起動すればいいと思います。
もし、DBにあるデータを一定間隔で監視したいなら、デーモンを作った方がサーバの負荷は減ります。
要件によるでしょう。
ただ、「指定時間ぴったしに」ということであれば (a) が多いかもしれませんね。
(b) 形式だと前の処理が終わってなかったりすると「指定時間以降に」という設定になってしまいますし。
(B)は開発も面倒ですね。
例えば、オークションですと、一日数千件の終了データがあると思います
この場合、まず終了時刻をテーブルにセットします。
その終了時刻テーブルを監視するデーモンが動いており、終了時刻になった取引を検出次第、終了手続きタスクを起動するのが一般的かと思います。
この際、監視デーモンが複数起動しないようにしておくことが肝要です。
ありがとうございます。
マッシュアップ的サイト構築のために、(a)で2000行、(b)で3000行くらいのLAMP実装経験を持つものです。
結論から言いますと、(a)がお勧めです。
理由は、Perlはデーモンに常駐させることを想定した言語ではなく、ネットワークの遅延などでプログラムの反応が遅くなったり無くなることがまれにり、その際catch exceptionなどの救済実装があまり一般的でないためです。
(b)でもプログラムの反応に目を瞑れば可能ですが、バグが一つでもあると落ちてしまうので、バグをすべて取り除く作業が非常に煩雑でした。(その際、Encode.pmのconvertの'auto'における潜在的なバグなど、自分のプログラム以外の箇所で腐心しました。)
ただし、実際インプリしてみて、起動や処理にかなり時間が要するプログラムが出来上がった場合は、この手法を選択することになると思います。
言うまでもないことかもしれませんが、(a)の場合、「lockファイルを使う」「psで同一のプロセスが生きてないか確認する」など重複回避処理をお忘れなく。
(間違った表現があればお許しください。)
実務に基づくアドバイスで大変参考になります。
例えば、オークションですと、一日数千件の終了データがあると思います。その場合、毎度1件1件cronに追加する訳にはいかないので、特定プログラムを毎時セットするのが現実的ですね。