أسوأ خطأ في الإنتاج سببته على الإطلاق كان شخصية واحدة في تعبير كرون. أردت تشغيل نسخة احتياطية لقاعدة البيانات كل ليلة عند منتصف الليل. كتبت 0 0 * * * في رأسي، كتبت 0 0 * * 0 في crontab، وانتقل. تم تشغيل المهمة مرة واحدة - يوم الأحد التالي - ثم ليس مرة أخرى لمدة أسبوع. اكتشفت عندما كنت بحاجة إلى نسخة احتياطية غير موجودة. تحول هذا الرقم الوحيد في غير محله إلى "؛ كل يوم واقتباس؛ إلى "؛ كل يوم أحد، "؛ ولا شيء في بناء الجملة حذرني. كرون يفعل بالضبط ما تقوله، بصمت، إلى الأبد.
ليرة تركية؛DR: ال مولد التعبير كرون ينشئ تعبير crontab قياسيًا بخمسة حقول من الحقول العادية أو الإعدادات المسبقة بنقرة واحدة، ويشرحه في جملة أثناء الكتابة، ويعاين أوقات التشغيل التالية بالتوقيت العالمي المنسق حتى تتمكن من تأكيد الجدول الزمني قبل أن يصل إلى الإنتاج. يتم تشغيله بالكامل في متصفحك - بدون حساب أو تحميل.
لقد قمت ببناء هذه الأداة لـ Toolz.dev لأنني لم أرغب مرة أخرى في الالتزام بجدول زمني قمت فقط بالتحقق منه في رأسي. قراءة تعبير cron مرة أخرى باللغة الإنجليزية البسيطة ورؤية التواريخ الفعلية التي سيتم إطلاقها تلتقط 0 -مقابل- * فئة الخطأ على الفور. يغطي هذا الدليل كيفية عمل بناء جملة cron، والتفاعلات التي تعثر الجميع تقريبًا، وكيفية استخدام المولد لإنتاج تعبير يمكنك الوثوق به.
ما هو تعبير كرون؟
تعبير cron عبارة عن جدول زمني مدمج يتكون من خمسة حقول مفصولة بمسافات. من اليسار إلى اليمين هي الدقيقة والساعة واليوم من الشهر والشهر واليوم من الأسبوع. يتم تحديد نموذج الحقول الخمسة بواسطة POSIX في تنسيق دخول Crontab. المجدول - يونكس الكلاسيكي cron daemon، ولكن أيضًا أنظمة CI، وKubernetes CronJobs، وعدد لا يحصى من متسابقي المهام - يقرأ التعبير ويطلق وظيفتك في كل لحظة تتطابق مع جميع الحقول.
يقبل كل حقل أكثر من رقم واحد. نجمة (*) يعني "؛ كل "؛ قيمة هذا الحقل. قائمة مثل 1,15,30 يعني عدة قيم محددة. نطاق مثل 1-5 يعني فترة شاملة. خطوة مثل */15 يعني "؛ كل خمسة عشر"؛ القيمة تبدأ من الحقل '؛s الحد الأدنى. يمكنك دمجها عبر الحقول الخمسة لوصف أي جدول زمني متكرر تقريبًا: كل دقيقة، كل ربع ساعة، أيام الأسبوع في الساعة 8 صباحًا، الأول من كل شهر، الربع الأخير و#39؛ يوم الافتتاح. القوة حقيقية، وكذلك الكثافة - يمكن لخمسة حقول تشفير جدول زمني دقيق بشكل مدهش، ولهذا السبب بالضبط من السهل أن تخطئ بمهارة.
فيما يلي تخطيط الحقل الذي يستخدمه المولد، مع النطاق الصالح لكل منها
| موضع | مجال | يتراوح | ملاحظات |
|---|---|---|---|
| 1 | دقيقة | 0 59 | |
| 2 | ساعة | 0 23 | 24 ساعة |
| 3 | يوم من الشهر | 1 31 | |
| 4 | شهر | 1 ن.12 | JAN.حDEC مقبولة أيضا |
| 5 | يوم من الاسبوع | 0 · 6 | 0 و 7 كلاهما يعني الأحد؛ SUN.حSAT مقبول |
لماذا تولد التعبير بدلا من كتابته باليد
كتابة cron يدويًا هي رهان على أنك تذكرت ترتيب الحقل والنطاقات والتفاعلات بشكل صحيح، دون أي تعليقات حتى يتم تشغيل المهمة أو فشلها. يستبدل المولد هذا الرهان بالتأكيد. عندما تقوم بملء الحقول، فإنه يفعل ثلاثة أشياء في وقت واحد.
أولاً، يقوم بتجميع التعبير والتحقق من صحته، والتقاط القيم خارج النطاق، والنطاقات المعكوسة، والخطوات المشوهة برسالة تسمي الحقل المخالف. تعبير مثل 0 25 * * * - الساعة 25 غير موجودة - مرفوضة بتفسير وليست مقبولة ولا تهرب بصمت.
ثانياً، يجعل الجدول الزمني كجملة. 0 8 * * 1-5 يصبح "؛ في الساعة 08:00 من الاثنين إلى الجمعة."؛ قراءة الجدول بالكلمات هي أسرع طريقة لملاحظة أن ما قمت ببنائه ليس ما تقصده. كان من الممكن أن يكون خطأ النسخ الاحتياطي في منتصف الليل واضحًا في اللحظة التي قرأت فيها "؛ في الساعة 00:00 يوم الأحد والاقتباس؛ بدلا من "؛ في الساعة 00:00."؛
ثالثًا، يقوم بمعاينة أوقات التشغيل الفعلية القادمة. إن رؤية أن الوظيفة ستنطلق بعد ذلك خلال ثلاثة أشهر بدلاً من الليلة تخبرك بوجود خطأ ما بشكل أعمق بكثير من التحديق في العلامات النجمية. تلتقط هذه المعاينة أيضًا جداول زمنية مستحيلة - اطلب يوم 30 فبراير ولن يُظهر المولد أي جولات قادمة على الإطلاق، لأنه لا يوجد أي منها.
كيفية استخدام مولد التعبير كرون
الخطوة 1: ابدأ من إعداد مسبق أو قائمة فارغة
أسرع طريق للتعبير الصحيح هو البدء من تعبير قريب بالفعل. اختر إعدادًا مسبقًا مثل "؛ أيام الأسبوع الساعة 8 صباحًا، "؛ "؛ كل 15 دقيقة، "؛ أو "؛ أول شهر عند منتصف الليل، "؛ ويتم تحميل الحقول جاهزة للتعديل. إذا لم يكن هناك أي شيء مناسب، فابدأ من الإعداد الافتراضي لكل دقيقة وقم بالتحرير. توجد الإعدادات المسبقة لأن معظم الجداول الزمنية الحقيقية عبارة عن اختلافات في عشرات الأنماط الشائعة، والبدء من تعبير معروف جيد يزيل فئة كاملة من الأخطاء.
الخطوة 2: قم بتعيين الحقول الخمسة
أدخل قيمة في كل حقل، أو اتركها كـ * ل "؛كل."؛ يقبل كل حقل قيمة واحدة، أو قائمة فاصلة، أو نطاق واصلة، أو خطوة مائلة. على سبيل المثال، للتشغيل في أعلى كل ساعة خلال ساعات العمل في أيام الأسبوع، اضبط الدقيقة على 0، ساعة ل 9-17و يوم من الاسبوع ل 1-5، يترك يوم من الشهر والشهر كما *. يذكرك التلميح الموجود أسفل كل حقل بنطاقه الصالح حتى لا تضطر إلى حفظ الترتيب.
الخطوة 3: اقرأ الوصف باللغة الإنجليزية البسيطة
شاهد تحديث الوصف أثناء الكتابة. هذه هي الخطوة التي تنقذك. إذا كانت الجملة لا تتطابق مع الجدول الزمني الموجود في رأسك، فإن التعبير خاطئ، وقد اكتشفت ذلك في المتصفح بدلاً من الإنتاج بعد أسبوع. قم بتأكيد الوقت والأيام وأي قيود شهرية، اقرأ بالطريقة التي تريدها.
الخطوة 4: تحقق من عمليات التشغيل التالية وانسخها
انقر لمعاينة أوقات التشغيل القادمة، المحسوبة بالتوقيت العالمي المنسق. قم بمسحها ضوئيًا بحثًا عن أي شيء مفاجئ - فجوة طويلة جدًا، أو تشغيل أول بعيد جدًا، أو قائمة فارغة تشير إلى تاريخ مستحيل. عندما يبدو الجدول الزمني صحيحًا، انسخ التعبير والصقه في crontab أو خط الأنابيب أو بيان CronJob.
مصيدة اليوم من الشهر واليوم من الأسبوع
إذا كنت تتذكر شيئًا واحدًا عن كرون، فاجعله كذلك، لأنه يفاجئ الجميع تقريبًا في المرة الأولى. متى كلاهما حقل يوم الشهر وحقل يوم الأسبوع مقيدان - مما يعني عدم وجود أي منهما * - يجمعها cron القياسي مع OR، وليس AND. تعمل المهمة عندما إما تطابقات الحالة.
لذا 0 0 13 * 5 لا يعني "؛ منتصف ليل الجمعة 13."؛ يعني "؛ منتصف الليل في اليوم الثالث عشر من كل شهر، وكذلك منتصف الليل في كل يوم جمعة."؛ هذه جداول مختلفة جدًا؛ الحرائق الثانية عدة مرات في الشهر. يأتي هذا السلوك مباشرة من تطبيق Vixie cron الأصلي الذي يرثه معظم القائمين على الجدولة، ويكرمه المولد تمامًا. ستظهر لك معاينة التشغيل التالية يومي 13 و19، وهي أوضح طريقة ممكنة لالتقاط غرفة العمليات غير المقصودة.
القاعدة العملية: اترك أحد حقلي اليومين كما * إلا إذا كنت تريد حقًا سلوك OR. إذا كنت حقا بحاجة "؛ الجمعة الثالث عشر فقط، "؛ لا يستطيع كرون التعبير عن ذلك بتعبير واحد - فأنت تتعامل مع هذا المنطق في وظيفتك. إن رؤية تواريخ التشغيل الفعلية في المعاينة هو ما يحول هذا من مسكتك الكامنة إلى حقيقة واضحة ومرئية.
الخطوات والنطاقات والقوائم في الممارسة العملية
بناء جملة الخطوة هو المكان الذي يعيش فيه الكثير من قوة الجدولة، وحيث يبدأ الكثير من الارتباك. */5 في حقل الدقائق يعني الدقائق 0، 5، 10، 15، وهكذا إلى 55 - "؛ كل خمس دقائق."؛ يمكنك تثبيت خطوة إلى نطاق: 0-30/10 يعني الدقائق 0، 10، 20، و30 فقط. قيمة مجردة مع خطوة، مثل 5/15 في حقل الدقائق، يعني "؛ بدءًا من 5، كل 15"؛ حتى الحد الأقصى للمجال - 5، 20، 35، 50.
يتم الجمع بين القوائم والنطاقات بحرية. 1,4,7,10 يمنحك حقل الشهر جدولًا ربع سنوي - يناير وأبريل ويوليو وأكتوبر. 1-5 في يوم من أيام الأسبوع يمنحك من الاثنين إلى الجمعة. 9-17 في حقل الساعة يمنحك نافذة من تسعة إلى خمسة. خلطهم، 0 9-17 * * 1-5 يقرأ كـ "؛ في الدقيقة 0 من كل ساعة من الساعة 9 صباحًا حتى 5 مساءً، من الاثنين إلى الجمعة، وحصة؛ - ساعات عمل مشتركة نبضات القلب. يقوم المولد بتوسيع كل هذه العناصر والتحقق من صحتها، ويوضح الوصف ما قمت ببنائه، لذلك لا يوجد أي غموض حول ما إذا كان النطاق شاملاً (هو كذلك).
حالات الاستخدام الشائعة
النسخ الاحتياطية والصيانة المجدولة. وظيفة كرون الكنسي. يولد 0 2 * * * للحصول على نسخة احتياطية ليلية في الساعة 2 صباحًا، اقرأ الوصف للتأكد من أنه يومي وليس أسبوعيًا، وقم بمعاينة الجولات التالية للتأكد من أن الأولى الليلة. هذا هو الخطأ الدقيق الذي ارتكبته منذ سنوات، وهو الخطأ الذي تمنعه المعاينة بالضبط.
CI وجداول النشر. تستخدم الإصدارات الليلية وعمليات التشغيل الاختبارية المجدولة وعمليات النشر الدورية جميعها بناء جملة cron في GitHub Actions وGitLab CI والأنظمة المماثلة. قم ببناء التعبير هنا، وقم بتأكيده، والصقه في ملف سير العمل الخاص بك. نظرًا لأن هذه الأنظمة تعمل على خوادمها الخاصة، لاحظ تحذير المنطقة الزمنية أدناه.
خطوط أنابيب البيانات والتقارير. تقرير أسبوعي كل يوم اثنين الساعة 6 صباحًا 0 6 * * 1؛ التراكم الشهري على الأول هو 0 0 1 * *؛ وظيفة ربع سنوية هي 0 0 1 1,4,7,10 *. يؤدي إنشاء هذه العناصر وقراءتها مرة أخرى إلى إيقاف "؛ran في اليوم الخطأ "؛ حادثة خط الأنابيب.
دفء ذاكرة التخزين المؤقت ونبضات القلب. وظائف عالية التردد مثل */5 * * * * حافظ على دفء ذاكرات التخزين المؤقت أو التحقق من الصحة. تؤكد المعاينة أن الفاصل الزمني هو ما تتوقعه وليس مرة واحدة كل ساعة على سبيل المثال لأنك وضعت الخطوة في الحقل الخطأ.
تعلم كرون. إذا كنت لا تزال تبني الحدس، فإن المولد هو أداة تعليمية. اكتب تعبيرًا، واقرأ الجملة، وشاهد عمليات التشغيل، ويصبح التعيين بين بناء الجملة والسلوك ملموسًا بطريقة لا يديرها التوثيق وحده أبدًا.
ملاحظة حول المناطق الزمنية
تحسب معاينة التشغيل التالي الأوقات بالتوقيت العالمي المنسق، لذا تكون النتيجة حتمية ونفس الشيء بالنسبة لكل من يقرأ هذا. ومع ذلك، تعمل برامج cron الحقيقية في المنطقة الزمنية المحلية للخادم '؛ ما لم يتم تكوينها بطريقة أخرى، ولكل من موفري CI اصطلاح خاص بهم - العديد منهم افتراضيون لـ UTC، والبعض الآخر لا يفعل ذلك. التعبير نفسه لا يحمل أي منطقة زمنية؛ إن المجدول هو الذي يقرر. لذلك عندما تقوم بنقل تعبير من هذه الأداة إلى نظام مباشر، قم بتأكيد المنطقة الزمنية للنظام '؛s وقم بتعويض أوقات التشغيل في رأسك وفقًا لذلك. أ 0 0 * * * الوظيفة هي منتصف الليل - ولكن منتصف الليل أين يعتمد كليًا على المكان الذي تعمل فيه المهمة. إذا كنت بحاجة إلى التفكير في إزاحات المنطقة الزمنية، فإن محول المنطقة الزمنية مفيد، و محول الطابع الزمني يساعد عند تشغيل سجلات المجدول الخاصة بك كطوابع زمنية لنظام Unix.
توليد مقابل تحليل التعبير
هذه الأداة تبني تعبيرا من الحقول. شقيقها، ال محلل تعبير كرون، يذهب في الاتجاه الآخر: لصق تعبير موجود ويشرحه ويعين تشغيله. يغطي الاثنان اتجاهين لنفس المشكلة. استخدم المولد عندما تعرف الجدول الزمني الذي تريده وتحتاج إلى بناء الجملة؛ استخدم المحلل اللغوي عندما ترث تعبيرًا وتحتاج إلى فهم ما يفعله. كلاهما يحترم نفس دلالات Vixie-cron، بما في ذلك قاعدة اليوم من الشهر أو اليوم من الأسبوع، وبالتالي فإن الوصف الذي تقرأه في أحدهما يتطابق مع السلوك الذي قد تراه في الآخر. إنهما معًا زوج صغير ومركّز ضمن المجموعة الأوسع التي أصفها في مجموعة أدوات مطور الويب نظرة عامة وعلى نطاق أوسع دليل أدوات الترميز.
الخصوصية: كل شيء يعمل في متصفحك
لا يوجد شيء للتحميل هنا، ولا يتم تحميل أي شيء. تم إنشاء التعبير والتحقق من صحته ووصفه ومحاكاته بالكامل في التعليمات البرمجية من جانب العميل. وهذا مهم أكثر مما قد يبدو: يمكن لجداول العمل الداخلية أن تكشف أشياء حول بنية النظام '؛ والإيقاع الذي لا تريد الجلوس فيه في سجلات طرف ثالث '؛s. يمكنك التأكد من أن الأداة مستقلة عن طريق قطع الاتصال بالإنترنت - فهي تستمر في العمل. هذا هو نفس مبدأ جانب العميل وراء كل أداة على Toolz.dev، وهو ما أطرحه بالكامل في خصوصية البيانات في الأدوات عبر الإنترنت مقال.
أسئلة وأجوبة
كيف أكتب تعبير كرون؟
يحتوي تعبير cron القياسي على خمسة حقول مفصولة بمسافات: الدقيقة، والساعة، واليوم من الشهر، والشهر، واليوم من الأسبوع. كل حقل عبارة عن قيمة محددة، أو قائمة، أو نطاق، أو خطوة، أو * لكل. على سبيل المثال، 0 8 * * 1-5 يعني الساعة 08:00 من الاثنين إلى الجمعة. تقوم هذه الأداة ببناء التعبير لك وتظهر ما يعنيه أثناء التنقل.
ماذا تعني حقول كرون الخمسة؟
من اليسار إلى اليمين هي الدقيقة (0-59)، الساعة (0-23)، يوم من الشهر (1-31)، الشهر (1-12)، ويوم الأسبوع (0-6، حيث يعني 0 و7 يوم الأحد). نجمة في الحقل تعني "؛ كل "؛ قيمة هذا الحقل. تقوم الأداة بتسمية كل حقل حتى لا تضطر إلى تذكر الترتيب.
ماذا يفعل */5 يعني في كرون؟
تقدم الشرطة المائلة قيمة الخطوة. في حقل الدقيقة، */5 يعني "؛ كل 5 دقائق وحاصل؛ - 0، 5، 10، 15، وهكذا. يمكنك دمج الخطوات مع النطاقات أيضًا: 0-30/10 في حقل الدقائق يعني الدقائق 0 و10 و20 و30. الخطوات هي الطريقة القياسية للتعبير عن "؛ كل وحدة N."؛
لماذا تعمل وظيفتي أكثر من المتوقع مع تحديد يوم من الشهر ويوم من الأسبوع؟
هذه هي مفاجأة كرون الأكثر شيوعًا. عندما يتم تقييد حقول يوم الشهر ويوم الأسبوع (لا يتم تقييد أي منهما *)، يعاملهم cron القياسي على أنهم OR، وليس AND - يتم تشغيل المهمة عندما يتطابق أي من الشرطين. لذا 0 0 13 * 5 يعمل في اليوم الثالث عشر من الشهر وكل يوم جمعة، وليس فقط يوم الجمعة الثالث عشر. اترك حقلاً واحدًا كـ * إلا إذا كنت تريد حقًا سلوك OR.
ما هي المنطقة الزمنية التي تظهر بها أوقات التشغيل التالية؟
تحسب المعاينة عمليات التشغيل القادمة بالتوقيت العالمي المنسق بحيث تكون النتيجة هي نفسها للجميع. تستخدم برامج cron الحقيقية المنطقة الزمنية للخادم (أو إعداد TZ)، لذلك إذا كان الخادم الخاص بك يعمل في منطقة مختلفة، فقم بتعويض الأوقات وفقًا لذلك. التعبير نفسه لا يحمل منطقة زمنية - بل المجدول هو الذي يقرر.
هل يمكنني استخدام أسماء مثل الإثنين أو يناير بدلاً من الأرقام؟
نعم. يقبل حقل الشهر JAN خلال DEC ويقبل حقل يوم الأسبوع SUN خلال SAT، غير حساسة لحالة الأحرف. تفهمها الأداة عند التحقق من صحة تعبيرك ووصفه. تكون القيم الرقمية أكثر قابلية للنقل عبر برامج الجدولة، لذلك يصدر المولد أرقامًا، ولكن الإدخال المسمى مدعوم بالكامل.
هل هذا هو نفس بناء جملة كرونتاب؟
نعم، يؤدي هذا إلى إنشاء Unix/Vixie cron القياسي المكون من خمسة حقول والذي يستخدمه crontab ومعظم أنظمة CI وKubernetes CronJobs. تضيف بعض برامج الجدولة حقلًا مدته ست ثوانٍ أو امتدادات غير قياسية مثل @reboot؛ هذه ليست جزءًا من معيار الحقول الخمسة. بالنسبة للغالبية العظمى من احتياجات الجدولة، فإن التعبير المكون من خمسة حقول الذي تنتجه هذه الأداة هو بالضبط ما تريده.
هل يتم إرسال جدولي إلى أي مكان؟
لا. تم إنشاء التعبير والتحقق من صحته ووصفه ومحاكاته بالكامل في متصفحك باستخدام رمز من جانب العميل. لا يتم تحميل أو تخزين أي شيء. يمكنك تأكيد ذلك عن طريق قطع الاتصال بالإنترنت - ولا يزال المولد يعمل.



