Cron ایکسپریشن کیا ہے؟
Cron ایکسپریشن ایک مختصر شیڈولنگ سٹرنگ ہے جو جاب شیڈولر کو بتاتی ہے کہ کوئی ٹاسک کب چلانا ہے۔ یہ فارمیٹ 1975 میں Unix V7 cron ڈیمن میں پیدا ہوا اور اس کے بعد سے تقریباً نہیں بدلا — یہی پانچ فیلڈ گرامر آج Kubernetes CronJobs، AWS EventBridge، GitHub Actions ورک فلوز، Google Cloud Scheduler، GitLab CI، Jenkins پائپ لائنز اور ہر لینکس ڈسٹریبیوشن کے ساتھ آنے والے crontab بائنری میں نظر آتا ہے۔ اس گرامر میں تیرہ حروف میں بہت معنی سمٹ جاتے ہیں — اس لیے ایک پارسر جو اسے سادہ انگریزی میں بیان کرے اعتماد سے ڈیپلوائی اور رات تین بجے رول بیک کے درمیان فرق ہوتا ہے۔
Cron ایکسپریشن کیسے کام کرتی ہے؟
معیاری Cron ایکسپریشن میں پانچ اسپیس سے الگ فیلڈز ہوتے ہیں جو مل کر دہرانے والا شیڈول بناتے ہیں۔ انجن ہر منٹ موجودہ وقت کو ایکسپریشن سے ملاتا ہے اور جب پانچوں فیلڈز مطابقت کریں تو کام چلاتا ہے۔ فیلڈز بائیں سے دائیں:
- منٹ (0–59)۔ گھنٹے میں کس منٹ کام چلتا ہے۔
0یعنی پورے گھنٹے پر،30یعنی آدھے گھنٹے پر،*/5یعنی ہر پانچ منٹ (00، 05، 10...)، اور15,45یعنی پندرہ منٹ اور پینتالیس منٹ پر۔ - گھنٹہ (0–23)۔ 24 گھنٹے کے پیمانے پر دن کا کون سا گھنٹہ۔
0آدھی رات،9صبح کے 9،17شام کے 5۔ رینجز (9-17کاروباری اوقات) اور قدمی اقدار (*/2ہر دوسرا گھنٹہ) منٹ کی طرح کام کرتے ہیں۔ - مہینے کا دن (1–31)۔ کون سا کیلنڈر دن چلانا ہے۔
1مہینے کی پہلی تاریخ،*ہر دن،1,15پہلی اور پندرہویں۔31سے محتاط رہیں — یہ ان مہینوں کو خاموشی سے چھوڑ دیتا ہے جن میں 31 دن نہیں ہوتے۔ - مہینہ (1–12 یا JAN–DEC)۔ کون سے مہینے چلانا ہے۔
*ہر مہینہ،1,7جنوری اور جولائی،1-3صرف پہلی سہ ماہی۔ تین حرفی مہینے کے نام زیادہ تر نفاذ میں کیس غیر حساس ہیں۔ - ہفتے کا دن (0–7، جہاں 0 اور 7 دونوں اتوار ہیں)۔ مخصوص دنوں تک محدود کرتا ہے۔
1-5پیر سے جمعہ،0,6ہفتہ آخر،MON-FRIزیادہ تر پارسرز میں کام کرتا ہے۔ جب دونوں فیلڈز مخصوص اقدار پر ہوں تو کلاسک cron دونوں میں سے کسی ایک پر چلتا ہے (منطقی OR)۔
Cron ایکسپریشن پارسر کیوں استعمال کریں؟
- ڈیپلوائی سے پہلے خاموش غلط فہمی پکڑیں۔ ایکسپریشن `0 2 */3 * *` ہر تین منٹ نہیں بلکہ ہر تیسرے دن صبح 2 بجے چلتی ہے — یہاں پیسٹ کریں اور پروڈکشن میں بھیجنے سے پہلے سادہ الفاظ میں دیکھیں۔
- زیادہ تر کلاؤڈ شیڈولر بطور ڈیفالٹ UTC میں چلتے ہیں۔ اپنے مقامی ٹائم زون میں اگلے دس وقت دیکھنے سے DST کا ایک گھنٹے کا فرق ظاہر ہو جاتا ہے، پہلے کہ رات تین بجے کسی کو پیج آئے۔
- `@daily`، `@weekly` اور `@monthly` جیسے شارٹ کٹ آسان لیکن مبہم ہیں۔ پارسر بنیادی پانچ فیلڈ فارم دکھاتا ہے تاکہ آپ جان سکیں کہ اصل میں کیا شیڈول ہوا۔
- فیلڈ بہ فیلڈ بلڈر آپ کو ایک وقت میں ایک کالم شیڈول بنانے اور قابلِ فہم وضاحت کو لائیو اپڈیٹ ہوتے دیکھنے دیتا ہے — cron مین پیج دسویں بار پڑھنے سے بہت تیز۔
Cron ایکسپریشنز کہاں استعمال ہوتی ہیں؟
Cron سینٹیکس ہر اس جگہ نظر آتا ہے جہاں کسی کام کو گھڑی پر دہرانا ہو۔ تین سب سے عام سطحیں، ہر ایک کی مشہور خامی کے ساتھ:
- بیک اپ شیڈولز۔ کلاسک `crontab -e` اندراج جو رات 2 بجے ڈیٹا بیس کا ڈمپ S3 پر بھیجتا ہے، یا ہر مہینے کی پہلی تاریخ `pg_dump` آرکائیو گھماتا ہے۔ `0 2 * * * /usr/local/bin/backup.sh` جیسی لائن لاتعداد لینکس سرورز پر موجود ہے۔ منٹ اور گھنٹہ درست کریں، stderr کو پائیدار جگہ ری ڈائریکٹ کریں، اور دستی چیک لسٹ کو خودکار اسکرپٹ سے بدل دیں۔
- GitHub Actions `schedule` ٹرگرز۔ `.github/workflows/*.yml` میں `on.schedule.cron` کلید معیاری پانچ فیلڈ cron قبول کرتی ہے، لیکن کام ہمیشہ UTC میں چلتا ہے اور اگر رنر قطار مصروف ہو تو GitHub خاموشی سے وقت چھوڑ سکتا ہے۔ عام پیٹرن: `cron: '0 9 * * 1-5'` پیر سے جمعہ UTC میں صبح 9 بجے ڈائجسٹ بھیجنے کے لیے۔ پہلے اپنے مقامی ٹائم زون میں دیکھیں تاکہ BST میں صبح 9 بجے کا وعدہ 10 بجے نہ آئے۔
- AWS EventBridge Scheduler۔ EventBridge cron ایکسپریشنز سال کے لیے چھٹا فیلڈ لیتے ہیں اور مہینے کے دن یا ہفتے کے دن کے فیلڈ میں `*` کی جگہ `?` ضروری ہے — `cron(0 9 ? * MON-FRI *)` کلاسک ہفتے کے دن صبح 9 بجے کا EventBridge ترجمہ ہے۔ Lambda invocations، ECS ٹاسک چلانے اور Step Function شروع کرنے کے لیے استعمال ہوتا ہے؛ کلاسک cron سے یہ مسموعیت CloudFormation ڈیپلوائیز میں `ValidationException` غلطی کا نمبر ایک ذریعہ ہے۔
حقیقی Cron ایکسپریشن کیسی دکھتی ہے؟
0 9 * * 1-5 لیں — ہر ہفتے کے دن صبح 9:00 بجے چلتی ہے۔ فیلڈز بائیں سے دائیں: 0 گھنٹے کا صفر منٹ، 9 24 گھنٹے کے پیمانے پر صبح 9، * مہینے کے دن کا مطلب ہر کیلنڈر دن، * مہینے کا مطلب ہر مہینہ، اور 1-5 ہفتے کا دن صرف پیر سے جمعہ (1 = پیر)۔ اوپر ان پٹ میں پیسٹ کریں اور پارسر 09:00 بجے، پیر سے جمعہ کی تصدیق کرتا ہے۔ AWS EventBridge سینٹیکس میں: cron(0 9 ? * MON-FRI *)۔ Quartz ایکسپریشن میں (چھ فیلڈ، سرکردہ سیکنڈ): 0 0 9 ? * MON-FRI۔ تین مختلف پلیٹ فارمز، تین سطحی شکلیں، ایک بنیادی شیڈول۔
Cron ایکسپریشنز ایک ہی طریقے سے بے رحم ہوتی ہیں: ایک ٹائپو آپ کو سینٹیکسی طور پر درست شیڈول دیتا ہے جو غلط وقت پر چلتا ہے، بغیر کوڈ ریویو میں کوئی غلطی پکڑے۔ `0 0 1 * *` کو پڑھنا اور جاننا کہ یہ یکم جنوری نہیں ہر مہینے کی پہلی تاریخ آدھی رات کو چلتی ہے — اس میں مشق لگتی ہے۔ اوپر پارسر اس مشق کو دس سیکنڈ کی جانچ میں بدل دیتا ہے — ایکسپریشن پیسٹ کریں، انگریزی پڑھیں، اپنے مقامی ٹائم زون میں اگلے دس وقت دیکھیں، اور YAML اس یقین کے ساتھ بھیجیں کہ cron لائن وہی کرتی ہے جو کمٹ پیغام کہتا ہے۔
5 فیلڈ اور 6 فیلڈ cron میں کیا فرق ہے؟
پانچ فیلڈ cron کلاسک Unix گرامر ہے جس میں ایک منٹ کی ریزولیوشن ہوتی ہے۔ چھ فیلڈ cron ذیلی منٹ شیڈولنگ کے لیے سرکردہ سیکنڈ کالم شامل کرتا ہے — Quartz اور Spring کی @Scheduled میں استعمال ہوتا ہے۔ AWS EventBridge بھی چھ فیلڈ استعمال کرتا ہے لیکن اس کا اضافی کالم اختتامی سال ہے، نہ کہ سیکنڈ۔
@hourly، @daily اور @weekly کا کیا مطلب ہے؟
1987 میں Vixie-cron کے متعارف کردہ مختصر نام۔ @hourly = 0 * * * *، @daily = 0 0 * * *، @weekly = 0 0 * * 0، @monthly = 0 0 1 * *، @yearly = 0 0 1 1 *۔ @reboot بوٹ پر ایک بار چلتا ہے۔ GitHub Actions اور EventBridge یہ مختصر نام مسترد کرتے ہیں۔
Cron میں اتوار 0 ہے یا 7؟
کلاسک Vixie cron میں دونوں — 0 اور 7 دونوں قبول ہیں تاکہ 5-7 جیسی رینجز جمعہ سے اتوار کے طور پر قدرتی پڑھی جا سکیں۔ پیر ہمیشہ 1، ہفتہ ہمیشہ 6۔ Quartz اور AWS EventBridge مختلف کنونشن استعمال کرتے ہیں: 1-7 جہاں اتوار 1 ہے۔ فرض کرنے سے پہلے پلیٹ فارم کے دستاویز چیک کریں۔
Cron ڈے لائٹ سیونگ ٹائم کو کیسے سنبھالتا ہے؟
انجن کے ٹائم زون پر منحصر ہے۔ UTC میں (EventBridge، Kubernetes اور GitHub Actions پر ڈیفالٹ) DST موجود نہیں۔ مقامی DST زون میں، کلاسک Vixie cron موسمِ بہار میں آگے ہونے کے خلاء میں کام چھوڑتا ہے اور موسمِ خزاں میں پیچھے ہونے کے دوران دو بار چلاتا ہے؛ systemd ٹائمرز ٹھیک ایک بار چلتے ہیں۔