- ベストアンサー
指定の時間が来たら、メールを送信したい
仮にファイル(time.dat)に、20070522_100000[EOF]とした場合 2007年5月22日の10時になったら、メールを決められた人に 送信したいのですが、どういう処理を行えばいいでしょうか。 メールのタイトル、本文は決まっていて定型です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>CGIを一定周期でファイルから時刻記述のデータを読み込み ここが問題です。 一定周期でCGIを起動するという処理が必要なんですよね? ということは、以下のパターンが考えられます。 やはり、CRONを使用し一定周期で起動するようにする。 または、 sample.cgiというプログラムを作り、 常駐させる。 内部処理ではループを行い、ループ内で ・time.datを読み込む処理 ・現在の時間と比較する処理 ・一致すればsendmailをする処理 ・一致しなければ60分wait みたいな感じです。 ですが、常駐させる処理というのは、あるファイルを待ち、 それが不定期でかつ、待ちファイルが来た場合にはすぐ処理を しなければならない時によく使う手法です。 ですので、CRONを使用するのが簡単だと思いますよ。 参考URLを見てください。CRONの設定方法があります。 だいたい、UNIX,LINUX、FreeBSDでも設定方法は 同じです。 参考URLの起動の項目は無視してOKだと思います。 (あなたがサーバ管理者でなければ)
その他の回答 (2)
- rafysta
- ベストアンサー率45% (24/53)
cronjobの方が良さそうですが、Schedule::Cronというcronの真似みたいなものがあります。 use Schedule::Cron; sub dispatcher{ print "ID: ", shift, "\n"; print "Args:","@_", "\n"; } sub job{ # 実行したい処理(メール送信、時間設定ファイルの読み込み?) } my $cron = new Schedule::Cron(\&dispatcher); $cron->add_entry("0 10-18 * * *", \&job); # 毎日午前10時から18時まで毎時0分に&job()を実行 $cron->add_entry("0-59/10 * * * *", \&job); # 10分ごとに&job()を実行 $cron->run(); 1回だけのjobでしたら、以下の方法では? 1.プログラムを実行した時点での時間を取得 2.time.dat(実行したいjobファイルリスト)の中で、一番早く実行しなければいけないjobまでの時間を計算 3.2.で計算した時間スリープした後、処理を実行。 4.もし、途中でjobが増えたり、3.が終了したら、再び1.から実行。
お礼
回答ありがとうございました。
- danmarino
- ベストアンサー率63% (26/41)
サーバーにcronjobを設置してスクリプトを自動的に動かす方法が一番簡単な方法だと思います。
お礼
早速の回答ありがとうございます。 cronjobを設置するのは、簡単なことなのでしょうか。 イメージとしては、CGIを一定周期でファイルから時刻記述の データを読み込み、現在の時刻と比較し一致したならば、 sendmailの関数を実行するというのを思っていました。 しかし、一定周期で実行・・・という手段がわからず質問した のです。時間単位にして、読み込みは1時間に1回でもかま いません。実現できるのであれば、JavaScriptでも構いません。 どなたかよろしくお願いします。
補足
cronでいきたいと思います。 どうもありがとうございました。