cron ایکسپریشن کیا ہے؟
cron ایکسپریشن ایک مختصر اسٹرنگ ہے جو شیڈولر کو بتاتی ہے کہ کوئی کام کب چلانا ہے۔ خالی جگہوں سے الگ پانچ خانے منٹ، گھنٹہ، مہینے کا دن، مہینہ اور ہفتے کا دن بیان کرتے ہیں۔ ایکسپریشن 30 2 * * 1 کا مطلب ہے ہر پیر، صبح ڈھائی بجے۔
یہ فارمیٹ Vixie cron سے آیا ہے، وہی شیڈولر جو تقریباً ہر Linux تقسیم کے ساتھ آتا ہے۔ یہی پانچ خانوں والا نحو crontab فائل سے کہیں آگے بھی ملتا ہے: Kubernetes CronJobs میں، GitHub Actions کے ورک فلو میں، AWS EventBridge کے قواعد میں، Jenkins کی پائپ لائنوں میں، Laravel اور Django کے شیڈول شدہ کاموں میں، اور زیادہ تر ہوسٹنگ کنٹرول پینلز کی cron ترتیبات میں۔ اسے ایک بار سیکھ لیں اور یہ ہر جگہ آپ کے ساتھ چلتا ہے۔
اس میں باریک غلطی کرنا بھی آسان ہے، اور اسی لیے اوپر دیا گیا بلڈر آپ کے لکھے ہوئے کو محض قبول کرنے کے بجائے اگلے چلنے کے اوقات دکھاتا ہے۔
پانچوں خانے، ترتیب سے
| مقام |
خانہ |
جائز قدریں |
| 1 | منٹ | 0–59 |
| 2 | گھنٹہ | 0–23 |
| 3 | مہینے کا دن | 1–31 |
| 4 | مہینہ | 1–12، یا JAN–DEC |
| 5 | ہفتے کا دن | 0–7، یا SUN–SAT |
ہفتے کے دن والے خانے میں 0 اور 7 دونوں کا مطلب اتوار ہے۔ یہ تکرار جان بوجھ کر ہے اور ابتدائی cron نفاذوں کے اُس اختلاف سے آئی ہے کہ ہفتہ کہاں سے شروع ہوتا ہے۔
ہر خانے میں استعمال ہونے والے خاص حروف
- ستارہ
* — ہر قدر۔ گھنٹے والے خانے میں اس کا مطلب ہر گھنٹہ ہے۔
- کوما
1,15,30 — مخصوص قدروں کی فہرست۔
- ہائفن
9-17 — ایک شامل دائرہ، نو سے سترہ تک۔
- سلیش
*/15 — ایک قدم۔ ہر پندرہویں قدر، یعنی منٹ 0، 15، 30 اور 45۔
قدم دائروں کے ساتھ مل کر بھی چلتے ہیں۔ منٹ والے خانے میں 0-30/10 0، 10، 20 اور 30 پر چلتا ہے، پھر اگلے گھنٹے تک رک جاتا ہے۔
اس ٹول سے cron ایکسپریشن کیسے بنائیں
- عام شیڈول کی فہرست سے کوئی ابتدائی نقطہ چنیں، یا سیدھا اوپر والے خانے میں ایکسپریشن لکھ دیں۔
- پانچوں انتخاب کاروں میں سے کسی کو بھی ایڈجسٹ کریں۔ یہ اوپر دیے گئے ایکسپریشن کے ساتھ ہم قدم رہتے ہیں، اس لیے کسی ایک میں ترمیم دوسرے کو اپ ڈیٹ کر دیتی ہے۔
- وضاحت اور پیش منظر دبائیں۔ آپ کو شیڈول کی سادہ زبان میں تشریح اور اگلے چلنے کے اوقات ملتے ہیں، تاکہ آپ کسی سرور کے قریب پہنچنے سے پہلے تصدیق کر سکیں کہ ایکسپریشن وہی مطلب رکھتا ہے جو آپ چاہتے تھے۔
- ایکسپریشن اپنے crontab، ورک فلو فائل یا کنٹرول پینل میں کاپی کر لیں۔
سب کچھ آپ کے براؤزر میں چلتا ہے۔ کوئی ایکسپریشن کہیں نہیں بھیجا جاتا، اور یہ بات سننے سے زیادہ اہم ہے — cron کی سطریں اکثر اندرونی ہوسٹ نام، اسکرپٹ کے راستے اور تعیناتی کے اوقات ظاہر کر دیتی ہیں۔
عام cron شیڈول
| ایکسپریشن |
کب چلتا ہے |
* * * * * | ہر منٹ |
*/5 * * * * | ہر پانچ منٹ بعد |
0 * * * * | ہر گھنٹے، گھنٹہ شروع ہوتے ہی |
0 */6 * * * | ہر چھ گھنٹے بعد |
0 3 * * * | روزانہ 03:00 بجے |
30 9 * * 1-5 | کام کے دنوں میں 09:30 بجے |
0 0 * * 0 | ہفتہ وار، اتوار آدھی رات |
0 0 1 * * | ماہانہ، مہینے کی پہلی تاریخ |
0 0 1 1 * | سالانہ، 1 جنوری |
مہینے کے دن اور ہفتے کے دن والا پھندا
یہ cron کی سب سے عام غلطی ہے، اور یہ تجربہ کار انجینئروں کو بھی پکڑ لیتی ہے۔
جب آپ مہینے کے دن اور ہفتے کے دن، دونوں خانوں کو محدود کرتے ہیں، تو cron کام اُس وقت چلاتا ہے جب کوئی ایک مطابقت رکھے — نہ کہ جب دونوں رکھیں۔ چنانچہ 0 0 1 * 1 کا مطلب یہ نہیں کہ ”مہینے کی پہلی تاریخ، مگر صرف اُس وقت جب وہ پیر ہو“۔ اس کا مطلب ہے ”ہر مہینے کی پہلی تاریخ، اور اس کے علاوہ ہر پیر“۔ یعنی آپ کی توقع کے ایک کے بجائے مہینے میں تقریباً پانچ بار۔
اگر ان میں سے کوئی ایک خانہ ستارہ ہو تو یہ قاعدہ لاگو نہیں ہوتا اور سب کچھ آپ کی توقع کے مطابق چلتا ہے۔ اوپر دیا گیا بلڈر اس رویے کو چھپانے کے بجائے اس کا لحاظ رکھتا ہے، اس لیے پیش منظر حقیقی چلنے کے اوقات دکھاتا ہے، وہ بھی جو آپ کے پیشِ نظر نہیں تھے۔
cron اور گھڑی کی تبدیلیاں
ڈے لائٹ سیونگ وہ جگہ ہے جہاں شیڈول خاموشی سے بگڑ جاتے ہیں۔ جب گھڑیاں آگے بڑھتی ہیں تو مقامی وقت کا ایک گھنٹہ سرے سے موجود ہی نہیں ہوتا، اس لیے اُس وقفے کے اندر شیڈول کیے گئے کام کے پاس چلنے کے لیے کوئی جائز منٹ نہیں بچتا۔ جب گھڑیاں پیچھے ہوتی ہیں تو وہ گھنٹہ دہرا جاتا ہے۔
مختلف شیڈولر اسے مختلف طریقے سے حل کرتے ہیں، اور سب سے محفوظ عادت یہ ہے کہ سرور UTC پر چلائے جائیں اور وقت کے لحاظ سے نازک کاموں کو رات کے پچھلے پہر سے دور رکھا جائے۔ یہاں کا پیش منظر حقیقی مقامی تاریخوں سے گزر کر آپ کے اپنے براؤزر کے ٹائم زون میں اوقات نکالتا ہے، اس لیے جو شیڈول گھڑی کی تبدیلی کے خلا میں آ جائے وہ ایک گھنٹہ دیر سے چلنے کے بجائے اسے چھوڑتا ہوا دکھایا جاتا ہے۔
یہ نحو کیا کچھ شامل نہیں کرتا
پانچ خانوں والا فارمیٹ cron کی واحد بولی نہیں، اور انہیں آپس میں ملا دینے سے ایسے ایکسپریشن بنتے ہیں جو یا تو رد ہو جاتے ہیں یا، اس سے بدتر، خاموشی سے غلط پڑھ لیے جاتے ہیں۔
- سیکنڈ۔ کچھ شیڈولر، خاص طور پر Quartz اور Spring، پہلے ایک سیکنڈ کا خانہ رکھتے ہیں، جس سے چھ خانے بن جاتے ہیں۔ معیاری crontab میں سیکنڈ کا خانہ نہیں ہوتا — ایک منٹ سب سے باریک ریزولوشن ہے۔
- سال۔ Quartz سال کے لیے ایک اختیاری ساتواں خانہ دیتا ہے۔ Vixie cron نہیں دیتا۔
L، W اور # ایکسٹینشنز۔ Quartz انہیں ”مہینے کا آخری دن“، ”قریب ترین کام کا دن“ اور ”nواں کام کا دن“ کے لیے استعمال کرتا ہے۔ یہ اس نحو کا حصہ نہیں۔
- مختصر میکرو۔ کئی cron نفاذ
@daily، @hourly اور @reboot قبول کرتے ہیں۔ انہیں ایکسپریشن پارسر کے بجائے cron ڈیمن سنبھالتا ہے، اس لیے ان کی معاونت پلیٹ فارم کے حساب سے مختلف ہوتی ہے۔