سؤال

ما هي الطريقة الفعالة لحساب وقت التشغيل التالي للحدث الذي أعطى الوقت الحالي ومواصفات 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 التي تفعل هذا فقط. إنه قادر على تحليل تعبير كرون ثم حساب الأحداث المستقبلية للجدول. إنها الخوارزمية ليست رائعة للغاية ، لكنها تقوم بالمهمة. قد تستحق نظرة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top