1

スケジューリング入力が必要なソフトウェアを構築していますが、単純に機能するため、crontab の設計を再利用したいと思っています。

CrontabExpressionsは、非常に単純な*/5 * * * *「5 分ごとに実行する」ことも、より複雑な2-59/3 1,9,22 11-26 1-6 ? 2003「2003 年には、1 月から 6 月までの毎月 11 日から 26 日の午前 1 時、午前 9 時、午後 10 時の 2 時から 3 分ごとに実行する」こともできます。

私は crontab と呼ばれる Linux ソフトウェアを使用するつもりはありません。これらの式を正しく評価できる方法を探しています (たとえば、crontab に一致する次の 25 のタイムスタンプを出力するか、ユーザー向けに抽象化された GUI に基づいて生成します)。 .

JavaScript や PHP、さらには他の言語でこれを行うライブラリや関数を実際に見つけることはできません。それらが存在しない場合、これを行うための良い方法は何ですか? 過度に複雑な正規表現が間違った答えになる可能性が高いことは既にわかっています。このタスクを実行する C ソース コードを crontab で見つけるのに苦労しています。

4

2 に答える 2

1

crontabcrontabに一致する次の25のタイムスタンプを出力するには、 Pythonモジュールを使用できます。

from datetime import datetime, timedelta
import crontab

tab = crontab.CronTab('2-59/3 1,9,22 11-26 1-6 ? 2012')

dt = datetime.now()
for _ in xrange(25):
    delay = tab.next(dt) # seconds before this crontab entry can be executed.
    dt += timedelta(seconds=delay)
    print(dt)

出力

2012-01-11 22:41:00
2012-01-11 22:44:00
2012-01-11 22:47:00
2012-01-11 22:50:00
2012-01-11 22:53:00
2012-01-11 22:56:00
2012-01-11 22:59:00
2012-01-12 01:02:00
2012-01-12 01:05:00
2012-01-12 01:08:00
2012-01-12 01:11:00
2012-01-12 01:14:00
2012-01-12 01:17:00
2012-01-12 01:20:00
2012-01-12 01:23:00
2012-01-12 01:26:00
2012-01-12 01:29:00
2012-01-12 01:32:00
2012-01-12 01:35:00
2012-01-12 01:38:00
2012-01-12 01:41:00
2012-01-12 01:44:00
2012-01-12 01:47:00
2012-01-12 01:50:00
2012-01-12 01:53:00

モジュールを提供しますが、より豊富な機能(解析/生成)を備えたpython-crontabもあります。crontab

于 2012-01-03T16:52:31.940 に答える
0

cron 式を非常に簡単に評価するために使用できるJava ライブラリがQuartz Schedulerの一部としてあります。

クラスは非常に便利なorのCronExpressionようなメソッドを生成します。isSatisfiedBy(Date date)getNextValidTimeAfter(Date date)

ライブラリは無料で利用できます。

于 2012-03-03T12:08:04.293 に答える