احسب الوقت المقرر التالي بناءً على مواصفات cron
سؤال
ما هي الطريقة الفعالة لحساب وقت التشغيل التالي للحدث الذي أعطى الوقت الحالي ومواصفات cron؟
أبحث عن شيء آخر غير "حلقة من خلال كل دقيقة للتحقق مما إذا كان يتطابق مع المواصفات".
قد تكون أمثلة المواصفات:
- كل شهر ، في الأول و 15 في 15:01
- في 10،20،30،40،50 دقيقة بعد الساعة كل ساعة
سيكون رمز Python جميل ولكن رمز PSUEDO أو وصف المستوى العالي سيكون موضع تقدير أيضًا.
تحديث] افترض أن المواصفات محسورة بالفعل وهي في شكل معقول.
المحلول
مجرد النظر إليه ، أعتقد أنك بحاجة إلى:
- تحليل مواصفات Chron إلى خمس صفائف تحتوي على قيم مقبولة لكل حقل ؛
- تحليل "الآن" لقيمة لكل حقل ؛
- بترتيب دقيقة ، ساعة ، {يوم الشهر أو يوم الأسبوع} ، شهر الشهر: ابحث عن أدنى قيمة صفيف تتناسب مع القيمة الحالية أو تتجاوزها ، تصحيح الحمل.
لا أعرف كيف أتعامل مع يوم الأسبوع ويوم الشهر في وقت واحد ؛ أنا متأكد من أن هناك طريقة ، لكن من ناحية أخرى ، لا أعتقد أنني رأيت مواصفات محددة فعليًا على حد سواء. أعتقد أنه سيكون كافيًا لكتابة معالج لأي منهما ورمي خطأ إذا تلقيت كليهما.
تعديل: على ما يبدو إذا تم تحديد كل يوم من الأسبوع ويوم الشهر ، فمن المفترض أن تطلق النار عليها على حد سواء - أي إذا كانت القاعدة "15 ، الأربعاء" ستطلق النار على كل 15 و كل أربعاء.
حزمة كرونيتر تفعل ما تريد:
import croniter
import datetime
now = datetime.datetime.now()
sched = '1 15 1,15 * *' # at 3:01pm on the 1st and 15th of every month
cron = croniter.croniter(sched, now)
for i in range(4):
nextdate = cron.get_next(datetime.datetime)
print nextdate
مطبوعات
2011-01-15 15:01:00
2011-02-01 15:01:00
2011-02-15 15:01:00
2011-03-01 15:01:00
على الرغم من أنه سيكون من الرائع أن يكون مكتوبًا كمؤشر فعلي. ربما حصلت على مشروعي التالي ؛-)
نصائح أخرى
في وقت لاحق هي مكتبة JavaScript التي تفعل هذا فقط. إنه قادر على تحليل تعبير كرون ثم حساب الأحداث المستقبلية للجدول. إنها الخوارزمية ليست رائعة للغاية ، لكنها تقوم بالمهمة. قد تستحق نظرة.