Whenever: حدد يوم على الوظائف الشهرية

تم إنشاؤها على ١٨ يونيو ٢٠٠٩  ·  13تعليقات  ·  مصدر: javan/whenever

عندما حاولت تحديد وقت مع cronjob شهريًا ، كان علي استخدام "1 شهر".
ولكن هذا خلق cronjob لكل شهر في يومنا هذا ، على سبيل المثال.

0 9 18 * * ..... بدلا من
0 9 1 * * ..... التي ستطلق في اليوم الأول من الشهر ...

التعليق الأكثر فائدة

إذا كنت لا تريد إعطاء التاريخ بالكامل ، فيمكنك تجربة شيء مثل هذا:

كل 1 شهر ،: في => "بداية الشهر في الساعة 9 صباحًا"
سينتج عن ذلك "0 9 1 * *" المقصود. سيحافظ أيضًا على نظافة الكود الخاص بك قليلاً :)

امل ان يساعد.

-AP

ال 13 كومينتر

هل تعرض كل إخراج cron هناك؟ يحتوي المثال الأول على 9 في خانة الساعة و 18 في اليوم.

 #. ---------------- دقيقة (0 - 59) 
 # | . ------------- ساعة (0 - 23)
 # | | . ---------- يوم من الشهر (1 - 31)
 # | | | . ------- الشهر (1-12) أو يناير ، فبراير ، مارس ، أبريل ... 
 # | | | | . ---- يوم من الأسبوع (0 - 6) (الأحد = 0 أو 7) أو الأحد ، الإثنين ، الثلاثاء ، الأربعاء ، الخميس ، الجمعة ، السبت 
 # | | | | |
 # * * * * * الأمر المطلوب تنفيذه

لا ، كان الناتج الكامل:

0 9 18 * * command

هل يمكنك لصق ملف Schedule.rb الخاص بك؟ يبدو أن شيئا ما معطلة.

every 1.month, :at => "9 AM" do
  command "..."
end

آه ، أرى المشكلة (بخلاف عدم وجود مستندات جيدة في هذا المجال). عندما تستخدم: عند 1 شهر ، يتم تحليل اليوم والساعة والدقيقة من الوقت. لذلك عندما تستخدم وقتًا مثل الساعة 9 صباحًا ، فإنه يفترض أن اليوم الذي تقصده هو اليوم.

طريقة واحدة لتصحيح هذا هو إعطائها تاريخ كامل. أعترف أن هذا يبدو قبيحًا ، لكن يجب أن يعمل: كل 1 شهر ،: في => "1 يناير 9 صباحًا"

سوف يتجاهل "يناير" ، لكنه ضروري لتحليل ناجح (متى يستخدم الجوهرة المزمنة لتحليل التواريخ والأوقات).

امل ان يساعد.

ال

إذا كنت لا تريد إعطاء التاريخ بالكامل ، فيمكنك تجربة شيء مثل هذا:

كل 1 شهر ،: في => "بداية الشهر في الساعة 9 صباحًا"
سينتج عن ذلك "0 9 1 * *" المقصود. سيحافظ أيضًا على نظافة الكود الخاص بك قليلاً :)

امل ان يساعد.

-AP

شكرا جافان.

كما قلت ، هذا ليس حسن المظهر ولكنه يعمل!

tsommer ... الحل أعلاه الذي نشرته يجب أن يعمل. لست متأكدًا مما إذا كنت قد نظرت إليه.

"بداية الشهر في الساعة 9 صباحًا" - هذه هي القواعد! شكرا.

أحتاج إلى التعبير عن وظيفة cron هذه "0 0 27-31 * *". هل هو ممكن مع بناء الجملة الحالي؟

ربما يكون من الأفضل توفير طريقة أخرى في DSL لتمرير وظائف cron في بناء جملة cron العادي ، شيء مثل:

 cron "0 0 27-31 * *" تفعل
 # ...
 نهاية

أوافق على أن خيار بناء الجملة الخام سيكون أمرًا رائعًا (نرحب بالبقع!). في غضون ذلك ، يمكنك القيام بذلك باستخدام اندفاعة من روبي.

every 1.month, :at => (27..31).to_a.map { |d| "12am January #{d}" } do
  command "..."
end

شكرا جافان على الاستجابة السريعة.
أنا أستخدم حاليًا التصحيح التالي. ربما يحتاج regexp بعض التحسينات لكنه يعمل معي الآن.

 فئة كلما :: الإخراج :: كرون
 CRON_EXP = / [^ \ s] + \ s [^ \ s +] \ s [^ \ s] + \ s [^ \ s] + \ s [^ \ s] + /

 def time_in_cron_syntax
 @ الوقت
 عندما CRON_EXP ثم @ time
 عندما الرمز ثم parse_symbol
 عند String ثم parse_as_string
 آخر parse_time
 نهاية
 نهاية
 نهاية

ثم يمكنني أن أفعل:

 كل "0 0 27-31 * *" تفعل
 ...
 نهاية

كيف أقوم بإنشاء كل شهرين ، نهاية اليوم (31) ، 11 59 مساءً هل كرون؟
كل 2. شهر ، عند 59 11 لتر * 0

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات