- PR -

perl での特殊?な時間算出

1
投稿者投稿内容
あるかな
大ベテラン
会議室デビュー日: 2003/11/04
投稿数: 245
投稿日時: 2006-06-14 09:02
perl スクリプトの話題がどこの会議室か迷いましたが、
ここにアップさせていただきました。
会議室違いでしたらご指摘をお願いします。

【前提条件】
perl 上で2つのスクリプトがあり、
 一方は不定期起動。
 一方は定期起動。
の環境です。
また、定期起動の間隔(分単位)は可変(設置する際に変更可能)を
考えています。
定期起動の仕組みは cron 利用です。

【目的】
こういった条件の場合に、不定期起動スクリプト側で定期起動スクリプトの
次回起動日付(YYYY/MM/DD HH:MI)を求める方法はありますでしょうか?

※不定期側で、定期側の次回起動時に利用するファイルを
 日付名称で予約?(データをそこに蓄積)させようと考えています。

【補足】
間隔の可変が曖昧すぎるということであれば、最短5分最長60分の
制限を設けたいと思います。
間隔が可変でなければ、不定期起動側で分数決めつけの if 文羅列で
出来るかな?と思いますが。。。

例)
30分間隔の場合
 17:00 に次回起動を求めた場合は 17:30
 17:56 に次回起動を求めた場合は 18:00
15分間隔の場合
 17:14 に次回起動を求めた場合は 17:15
 17:15 に次回起動を求めた場合は 17:30

よろしくお願いします。
あら
常連さん
会議室デビュー日: 2004/03/27
投稿数: 24
投稿日時: 2006-06-14 13:17
こんにちは。
"crontab -l"の第一パラメータを解析して次回起動を求めるのは?
5分以上60分以内の条件なら第一パラメータだけで判断できますよね。
(60分より間隔があくなら第二パラメータも解析しないとだめだけど...)
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2006-06-14 15:10
1)現在の時刻を0:00を基準とした経過分に変換
17:14 → 17 * 60 + 14 = 1034

2)1)で求めた経過分を実行間隔で割り、現在までの実行回数を求める
1034 / 15 = 68

3)2)で求めた実行回数に1を加算して、実行間隔を掛け次回実行経過分を求める
(68+1) * 15 = 1035

4)3)で求めた次回実行経過分から次回実行時刻を計算
時:60で割った値
分:60で割った余り

時:1035 / 60 = 17
分:1035 % 60 = 15 
次回実行時刻:17:15
あるかな
大ベテラン
会議室デビュー日: 2003/11/04
投稿数: 245
投稿日時: 2006-06-14 18:15
あら 様

ご返答ありがとうございます。
crontab 側の状況を解析する手もありましたね。
スクリプト内部だけで完結させなくて良いという考えがありませんでした。
今後の参考にさせていただきます。


ゆうじゅん 様

ご返答ありがとうございます。
丁寧な解説付きでの例題処理が大変参考になりました。
この処理を用いて、要件を満たすことが出来ました。
大変助かりました。ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)