Cron ఎక్స్ప్రెషన్ అంటే ఏమిటి?
Cron ఎక్స్ప్రెషన్ అనేది జాబ్ షెడ్యూలర్కు ఒక టాస్క్ ఎప్పుడు ఫైర్ చేయాలో ఖచ్చితంగా చెప్పే కాంపాక్ట్ షెడ్యూలింగ్ స్ట్రింగ్. ఈ ఫార్మాట్ 1975లో Unix V7 cron డీమన్లో పుట్టింది మరియు అప్పటి నుండి చాలా మారలేదు — అదే ఐదు-ఫీల్డ్ గ్రామర్ నేడు Kubernetes CronJobs, AWS EventBridge, GitHub Actions వర్క్ఫ్లోస్, Google Cloud Scheduler, GitLab CI, Jenkins పైప్లైన్లు, మరియు ప్రతి Linux డిస్ట్రిబ్యూషన్తో ఇంకా షిప్పవుతున్న 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వ తేదీ,*ప్రతి రోజు,1,151వ మరియు 15వ తేదీ.31తో జాగ్రత్తగా ఉండండి — ఇది 31వ రోజు లేని నెలలను నిశ్శబ్దంగా దాటుకుంటుంది. - నెల (1–12 లేదా JAN–DEC). ఏ నెలల్లో నడించాలో.
*ప్రతి నెల,1,7జనవరి మరియు జులై,1-3Q1 మాత్రమే. మూడు-అక్షరాల నెల పేర్లు చాలా ఇంప్లిమెంటేషన్లలో కేసు-ఇన్సెన్సిటివ్. - వారపు రోజు (0–7, ఇక్కడ 0 మరియు 7 రెండూ ఆదివారాన్ని సూచిస్తాయి). ఫైరింగ్ను నిర్దిష్ట వారంలో రోజులకు పరిమితం చేస్తుంది.
1-5సోమవారం నుండి శుక్రవారం,0,6వీకెండ్,MON-FRIచాలా పార్సర్లలో పనిచేస్తుంది. day-of-month మరియు day-of-week రెండూ నిర్దిష్ట విలువలకు సెట్ చేయబడినప్పుడు, క్లాసిక్ cron ఏ మ్యాచ్ అయినా ఫైర్ చేస్తుంది (logical OR).
Cron ఎక్స్ప్రెషన్ పార్సర్ ఎందుకు ఉపయోగించాలి?
- డిప్లాయ్ చేయడానికి ముందు నిశ్శబ్ద తప్పు చదవడం పట్టుకోండి. `0 2 */3 * *` ఎక్స్ప్రెషన్ ప్రతి మూడు నిమిషాలు కాదు, ప్రతి మూడవ రోజు రాత్రి 2 గంటలకు ఫైర్ చేస్తుంది — ఇక్కడ పేస్ట్ చేయండి మరియు ప్రొడక్షన్కు షిప్పింగ్ చేయడానికి ముందు అది సాదా ఇంగ్లీష్లో కనిపిస్తుంది.
- చాలా క్లౌడ్ షెడ్యూలర్లు డిఫాల్ట్గా UTC లో నడుస్తాయి. మీ స్థానిక జోన్లో తదుపరి పది రన్ సమయాలు ప్రివ్యూ చేయడం రాత్రి 3 గంటలకు ఎవరైనా పేజ్ అవ్వడానికి ముందు DST డ్రిఫ్ట్ బయటపడుతుంది.
- `@daily`, `@weekly`, మరియు `@monthly` వంటి షార్ట్కట్లు సౌకర్యంగా ఉంటాయి కానీ అస్పష్టంగా ఉంటాయి. పార్సర్ అంతర్లీన ఐదు-ఫీల్డ్ ఫారమ్ చూపిస్తుంది, కాబట్టి ఏమి షెడ్యూల్ చేయబడిందో మీకు ఖచ్చితంగా తెలుసు.
- ఫీల్డ్-బై-ఫీల్డ్ బిల్డర్ మీకు ఒక్కో కాలమ్ షెడ్యూల్ కాంపోజ్ చేయనిస్తుంది మరియు మానవ వివరణ లైవ్గా అప్డేట్ అవడం చూస్తారు, ఇది పదవసారి cron man పేజీ మళ్ళీ చదవడం కంటే చాలా వేగంగా ఉంటుంది.
Cron ఎక్స్ప్రెషన్లు ఎక్కడ ఉపయోగించబడతాయి?
Cron సింటాక్స్ ఒక జాబ్ క్లాక్పై రిపీట్ అవ్వాల్సిన చోటల్లా కనిపిస్తుంది. మూడు అత్యంత సాధారణ సర్ఫేస్లు, ప్రతిదాని ప్రసిద్ధమైన సమస్యతో:
- బ్యాకప్ షెడ్యూల్లు. రాత్రి 2 గంటలకు డేటాబేస్ను S3 కి డంప్ చేసే క్లాసిక్ `crontab -e` ఎంట్రీ, లేదా ప్రతి నెల 1వ తేదీ `pg_dump` ఆర్కైవ్ రొటేట్ చేసేది. `0 2 * * * /usr/local/bin/backup.sh` వంటి లైన్ చరిత్రలో ఏ ఇతర cron లైన్ కంటే ఎక్కువ Linux సర్వర్లపై షిప్పయింది.
- GitHub Actions `schedule` ట్రిగర్లు. `.github/workflows/*.yml` లో `on.schedule.cron` కీ స్టాండర్డ్ ఐదు-ఫీల్డ్ cron అంగీకరిస్తుంది, కానీ జాబ్ ఎప్పుడూ UTC లో నడుస్తుంది. సాధారణ పాటర్న్: సోమవారం నుండి శుక్రవారం ఉదయం 9 గంటల UTC డైజెస్ట్ పంపడానికి `cron: '0 9 * * 1-5'`. ముందుగా ఇక్కడ IST లో ప్రివ్యూ చేయండి.
- AWS EventBridge Scheduler. EventBridge cron ఎక్స్ప్రెషన్లు సంవత్సరానికి ఆరవ ఫీల్డ్ తీసుకుంటాయి మరియు day-of-month లేదా day-of-week ఫీల్డ్లలో ఒకదానిపై `*` బదులు `?` అవసరం — `cron(0 9 ? * MON-FRI *)` అనేది క్లాసిక్ వీక్డే 9 AM స్టాండర్డ్ cron యొక్క EventBridge అనువాదం. Lambda ఇన్వొకేషన్లు, ECS టాస్క్ రన్లు, మరియు Step Function స్టార్ట్లకు ఉపయోగించబడుతుంది.
నిజమైన cron ఎక్స్ప్రెషన్ ఎలా ఉంటుంది?
0 9 * * 1-5 తీసుకోండి — ప్రతి వీక్డే ఉదయం 9:00 గంటలకు ఫైర్ చేస్తుంది. ఫీల్డ్లు ఎడమ నుండి కుడికి చదవడం: 0 గంటలో జీరో నిమిషం, 9 24-గంటల క్లాక్పై ఉదయం 9 గంటలు, day-of-month పై * ప్రతి కేలండర్ రోజు, నెలపై * ప్రతి నెల, మరియు day-of-week పై 1-5 ఫైరింగ్ను సోమవారం నుండి శుక్రవారంకు పరిమితం చేస్తుంది. పైన ఇన్పుట్లో పేస్ట్ చేయండి మరియు పార్సర్ ఉదయం 09:00 గంటలకు, సోమవారం నుండి శుక్రవారం నిర్ధారిస్తుంది. AWS EventBridge సింటాక్స్లో అదే ఉద్దేశం cron(0 9 ? * MON-FRI *) — చివర సంవత్సర ఫీల్డ్ మరియు స్టాండర్డ్ cron * ఉపయోగించే చోట ? గమనించండి.
Cron ఎక్స్ప్రెషన్లు సరిగ్గా ఒక విధంగా క్షమించవు: టైపో మీకు సింటాక్టికల్గా చెల్లుబాటు అయ్యే షెడ్యూల్ ఇస్తుంది, ఇది తప్పు సమయంలో ఫైర్ చేస్తుంది, కోడ్ రివ్యూలో పట్టుకోవడానికి ఎలాంటి లోపం లేకుండా. `0 0 1 * *` చదివి అది జనవరి 1వ తేదీ కాదు, ప్రతి నెల 1వ తేదీ మధ్యరాత్రి నడుస్తుందని తెలుసుకోవడానికి ప్రాక్టీస్ అవసరం. పైన ఉన్న పార్సర్ ఆ ప్రాక్టీస్ను పది-సెకన్ల సానిటీ చెక్గా మారుస్తుంది — ఎక్స్ప్రెషన్ పేస్ట్ చేయండి, ఇంగ్లీష్ చదవండి, మీ స్థానిక జోన్లో తదుపరి పది రన్ సమయాలు స్కాన్ చేయండి, మరియు YAML కమిట్ సందేశం చెప్పింది cron లైన్ నిజంగా చేస్తుందని తెలుసుకొని YAML షిప్ చేయండి.
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 గా 1-7. అనుమానం తీసుకోవడానికి ముందు ప్లాట్ఫారమ్ డాక్స్ తనిఖీ చేయండి.
Cron డేలైట్ సేవింగ్ టైమ్ ఎలా హ్యాండిల్ చేస్తుంది?
ఇంజిన్ యొక్క టైమ్జోన్పై ఆధారపడి ఉంటుంది. UTC లో (EventBridge, Kubernetes, మరియు GitHub Actions లో డిఫాల్ట్) DST ఉండదు. స్థానిక DST జోన్లో, క్లాసిక్ Vixie cron స్ప్రింగ్-ఫార్వర్డ్ గ్యాప్ సమయంలో జాబ్లు స్కిప్ చేస్తుంది మరియు ఫాల్-బ్యాక్ సమయంలో రెండుసార్లు నడుపుతుంది; systemd టైమర్లు సరిగ్గా ఒకసారి ఫైర్ చేస్తాయి.