Cron ایکسپریشن وضاحت کار
ایک cron ایکسپریشن پیسٹ کریں اور سادہ انگریزی میں وضاحت حاصل کریں۔ standard 5-فیلڈ اور 6-فیلڈ (سیکنڈز کے ساتھ) cron فارمیٹ کو سپورٹ کرتا ہے۔
مثالیں (آزمانے کے لیے کلک کریں)
0 0 * * *— روزانہ آدھی رات کو*/5 * * * *— ہر 5 منٹ بعد0 9 * * MON-FRI— ہفتے کے دنوں کی صبح 9 بجے0 0 1 * *— ہر مہینے کی پہلی تاریخ آدھی رات کو0 0 * * 0— ہر اتوار آدھی رات کو15 2 * * *— روزانہ صبح 2:15 پر0 */6 * * *— ہر 6 گھنٹے بعد30 3 1-7 * 1— مہینے کے پہلے سوموار کو صبح 3:30 پر
- اوپر ان پٹ میں cron ایکسپریشن ٹائپ یا پیسٹ کریں۔
- نیچے ظاہر ہونے والی سادہ انگریزی وضاحت پڑھیں۔
- کسی بھی مثال چپ پر کلک کریں تاکہ اسے ان پٹ میں ڈالیں اور اسے ڈیکوڈ ہوتے دیکھیں۔
- سرخ میں دکھائے گئے کسی بھی پارس ایرر کو ٹھیک کریں اور اپنی مرضی سے مماثل وضاحت تک پہنچنے تک دہرائیں۔
یہ کیا کرتا ہے؟
وضاحت کار ایک standard Unix cron ایکسپریشن (5 فیلڈز) یا سیکنڈز کے ساتھ Quartz-سٹائل ایکسپریشن (6 فیلڈز) لیتا ہے اور "At 09:00 AM, Monday through Friday" جیسی انسانی بیان واپس کرتا ہے۔ یہ عام آپریٹرز — *, ",", - اور / — کو سپورٹ کرتا ہے، نامزد مہینوں (JAN-DEC) اور نامزد ہفتے کے دنوں (SUN-SAT) کے ساتھ۔ نتیجہ ہر کی سٹروک پر اپ ڈیٹ ہوتا ہے، لہذا آپ تیزی سے ایکسپریشن پر تکرار کر سکتے ہیں۔
مثال
ایک عام دفتری وقت کا کام:
0 9 * * MON-FRI ڈیکوڈ ہوا:
At 09:00 AM, Monday through Friday سیکنڈز کے ساتھ زیادہ مخصوص 6-فیلڈ Quartz ایکسپریشن:
0 30 2 ? * MON ڈیکوڈ ہوا (ہر سوموار 02:30:00 پر)۔
Cron فارمیٹ
┌───────── منٹ (0 - 59) │ ┌─────── گھنٹہ (0 - 23) │ │ ┌───── مہینے کا دن (1 - 31) │ │ │ ┌─── مہینہ (1 - 12، یا JAN-DEC) │ │ │ │ ┌─ ہفتے کا دن (0 - 6، یا SUN-SAT؛ 0 اور 7 دونوں کا مطلب اتوار ہے) │ │ │ │ │ * * * * *
cron "0 0 * * *" میری مقامی وقت کی بجائے UTC آدھی رات کو کیوں فائر کرتا ہے؟
زیادہ تر حقیقی cron بگز کچھ بار بار ہونے والے پھندوں میں آتے ہیں:
- ٹائم زون کا بہاؤ۔ 0 0 * * * شیڈیولر کے ٹائم زون میں آدھی رات کو فائر کرتا ہے۔ Kubernetes CronJobs اور GitHub Actions پر یہ بطور ڈیفالٹ UTC ہوتا ہے — spec.timeZone سیٹ کریں یا خود گھنٹے کو UTC میں تبدیل کریں۔
- 5-فیلڈ بمقابلہ 6-فیلڈ بے میل۔ 0 0 9 * * MON-FRI (6 فیلڈز) کو 5-فیلڈ شیڈیولر میں پیسٹ کرنا پہلے 0 کو منٹ اور 0 کو گھنٹے کے طور پر پڑھتا ہے، لہذا کام آدھی رات کو فائر کرتا ہے، 09:00 پر نہیں۔
- مہینے کا دن اور ہفتے کا دن ایک ساتھ۔ 0 0 15 * MON 15 تاریخ کو اور ہر سوموار کو چلتا ہے — صرف اس سوموار کو نہیں جو 15 تاریخ کو آتا ہے۔ یہ Vixie-cron کی OR سیمنٹکس ہے۔
- Step ڈپلائے پر دوبارہ شروع نہیں ہوتا۔ */10 * * * * گھڑی پر :00, :10, :20, :30, :40, :50 پر فائر کرتا ہے — آپ کی آخری ڈپلائے کے دس منٹ بعد نہیں۔
- standard cron میں ? کا استعمال۔ ? پلیس ہولڈر ایک Quartz ایکسٹینشن ہے۔ Unix cron اسے مسترد کرتا ہے — بجائے * استعمال کریں۔
- ہفتے کا دن 0 بمقابلہ 7۔ کلاسیکی cron میں دونوں کا مطلب اتوار ہے، لیکن کچھ پارسرز (پرانا BSD) صرف 0 قبول کرتے ہیں۔ اگر پورٹیبلٹی اہم ہو تو SUN استعمال کریں۔
آپریٹرز
*— کوئی بھی ویلیو,— ویلیوز کی فہرست (مثلاً MON,WED,FRI)-— رینج (مثلاً 1-5)/— سٹیپ ویلیوز (مثلاً */15 = ہر 15)
اکثر پوچھے جانے والے سوالات
5-فیلڈ اور 6-فیلڈ cron میں کیا فرق ہے؟
Standard POSIX cron کے 5 فیلڈز ہیں: منٹ، گھنٹہ، مہینے کا دن، مہینہ، ہفتے کا دن۔ 6-فیلڈ ویرینٹ سیکنڈ فیلڈ کو سامنے جوڑتا ہے اور Quartz، Spring @Scheduled، اور بہت سی Node cron لائبریریاں استعمال کرتی ہیں۔ "0 0 9 * * MON-FRI" جیسا 6-فیلڈ ایکسپریشن ہفتے کے دنوں میں 9:00:00 پر فائر کرتا ہے، جبکہ 5-فیلڈ "0 9 * * MON-FRI" 9:00 پر فائر کرتا ہے۔
کیا یہ L، W، اور # جیسے Quartz ایکسٹینشن کو سپورٹ کرتا ہے؟
یہ وضاحت کار عام Unix / Vixie cron لہجے کے علاوہ اختیاری سرکردہ سیکنڈ فیلڈ کو سپورٹ کرتا ہے۔ Quartz-صرف ٹوکنز (L آخری کے لیے، W ہفتے کے دن کے لیے، # n-ویں ہفتے کے دن کے لیے، اور ? پلیس ہولڈر) standard cron کا حصہ نہیں ہیں اور پارس ہونے کی گارنٹی نہیں ہے۔ اگر آپ ان پر انحصار کرتے ہیں تو ایکسپریشن کی تصدیق کے لیے شیڈیولر مخصوص دستاویزات استعمال کریں۔
0 0 * * * میری توقع سے مختلف وقت پر کیوں فائر کرتا ہے؟
Cron ایکسپریشنز کا کوئی ٹائم زون نہیں ہے۔ کام شیڈیولر کے مالک مشین یا کنٹینر کے ٹائم زون میں آدھی رات کو چلتا ہے۔ Kubernetes CronJobs، GitHub Actions، اور AWS EventBridge پر یہ بطور ڈیفالٹ UTC ہوتا ہے۔ اگر آپ مقامی آدھی رات چاہتے ہیں، شیڈیولر ٹائم زون واضح طور پر سیٹ کریں (CronJob پر spec.timeZone، TZ ماحولیاتی متغیر، cron.yaml ٹائم زون کلید)۔
کیا میں مہینے کا دن اور ہفتے کا دن ملا سکتا ہوں؟
Standard Vixie cron میں، اگر مہینے کا دن اور ہفتے کا دن دونوں محدود ہوں، کام تب فائر کرتا ہے جب کوئی ایک میچ کرے — یہ OR ہے، AND نہیں۔ لہذا "0 0 15 * MON" ہر مہینے کی 15 تاریخ کو اور ہر سوموار کو چلتا ہے۔ Quartz اسے الٹ دیتا ہے اور ابہام کو دور کرنے کے لیے ایک فیلڈ کو "?" ہونا ضروری سمجھتا ہے۔
سٹیپ ویلیوز کیسے کام کرتی ہیں؟
سٹیپ رینج/سٹیپ سنٹیکس استعمال کرتا ہے۔ "*/15 * * * *" :00 سے شروع ہو کر ہر 15 منٹ بعد فائر کرتا ہے۔ منٹ فیلڈ کے اندر "10-50/20" :10، :30، :50 پر فائر کرتا ہے۔ سٹیپ کا مطلب "اب سے ہر N" نہیں ہے — سرحدیں ہمیشہ رینج کے آغاز کے ساتھ منسلک ہوتی ہیں، لہذا سٹیپ کے موجودہ وقت کے ساتھ بہنے کی توقع نہ کریں۔
کیا آپ یہاں ٹیسٹ کیے گئے cron ایکسپریشنز محفوظ کرتے ہیں؟
نہیں۔ ہم ان ایکسپریشنز کا کوئی ریکارڈ نہیں رکھتے جو آپ ٹائپ کرتے ہیں۔ آپ جو بھی پیسٹ یا تجربہ کرتے ہیں وہ صفحہ بند یا ریفریش کرنے پر ضائع ہو جاتا ہے — کوئی لاگز نہیں، آپ کے شیڈیولز پر کوئی اینالیٹکس نہیں۔ اگر آپ اضافی یقین دہانی چاہتے ہیں تو اپنے براؤزر کے developer tools چیک کر سکتے ہیں۔