عندما حاولت تحديد وقت مع cronjob شهريًا ، كان علي استخدام "1 شهر".
ولكن هذا خلق cronjob لكل شهر في يومنا هذا ، على سبيل المثال.
0 9 18 * * ..... بدلا من
0 9 1 * * ..... التي ستطلق في اليوم الأول من الشهر ...
هل تعرض كل إخراج 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
التعليق الأكثر فائدة
إذا كنت لا تريد إعطاء التاريخ بالكامل ، فيمكنك تجربة شيء مثل هذا:
كل 1 شهر ،: في => "بداية الشهر في الساعة 9 صباحًا"
سينتج عن ذلك "0 9 1 * *" المقصود. سيحافظ أيضًا على نظافة الكود الخاص بك قليلاً :)
امل ان يساعد.
-AP