Cron expression என்றால் என்ன?
Cron expression என்பது ஒரு job scheduler க்கு ஒரு task எப்போது fire ஆக வேண்டும் என்று சரியாக சொல்லும் compact scheduling சரம். 1975 இல் Unix V7 cron daemon க்குள் பிறந்த இந்த வடிவம் அதிலிருந்து சிறிதும் மாறவில்லை — அதே ஐந்து-field grammar இன்று Kubernetes CronJobs, AWS EventBridge, GitHub Actions workflows, Google Cloud Scheduler, GitLab CI, Jenkins pipelines மற்றும் ஒவ்வொரு Linux distribution உடன் இன்னும் ship செய்யப்படும் crontab binary ல் தோன்றுகிறது. Grammar சுமார் பதின்மூன்று எழுத்துக்களில் நிறைய அர்த்தம் நிரம்பியுள்ளது, இதனால்தான் அதை plain English ஆக மாற்றும் parser ஒரு confident deploy க்கும் காலை 3 மணி rollback க்கும் வேறுபாடு.
Cron expression எவ்வாறு வேலை செய்கிறது?
Standard cron expression ஒரே நேரத்தில் மீண்டும் மீண்டும் வரும் schedule வரையறுக்கும் ஐந்து இடைவெளியால் பிரிக்கப்பட்ட fields கொண்டது. இயந்திரம் ஒவ்வொரு நிமிடமும் தற்போதைய wall clock ஐ expression க்கு எதிராக சோதித்து ஐந்து fields பொருந்தும்போது job fire செய்கிறது. Fields, இடதிலிருந்து வலதிற்கு:
- Minute (0–59). மணிக்குள் எந்த நிமிடத்தில் job இயங்குகிறது.
0என்பது மணி வேளையில்,30என்பது அரை மணியில்,*/5என்பது ஒவ்வொரு ஐந்து நிமிடமும் (00, 05, 10, ...), மற்றும்15,45என்பது கால் பாய்ந்து மற்றும் கால் இருக்கும்போது. - Hour (0–23). 24-மணி நேரக் கடிகையில் நாளின் எந்த மணி.
0என்பது நள்ளிரவு,9என்பது காலை 9 மணி,17என்பது மாலை 5 மணி. Ranges (9-17business hours க்கு) மற்றும் step values (*/2மாற்று மாற்று மணிக்கு) நிமிடங்களைப் போலவே வேலை செய்கின்றன. - Day of month (1–31). எந்த calendar day ல் இயங்கவேண்டும்.
1என்பது மாதத்தின் 1ம் தேதி,*என்பது ஒவ்வொரு நாளும்,1,15என்பது 1ம் தேதி மற்றும் 15ம் தேதி.31உடன் கவனமாக இருங்கள் — 31ம் தேதி இல்லாத மாதங்களை அது தவறாமல் தவிர்க்கிறது. - Month (1–12 அல்லது JAN–DEC). எந்த மாதங்களில் இயங்கவேண்டும்.
*என்பது ஒவ்வொரு மாதமும்,1,7என்பது ஜனவரி மற்றும் ஜூலை,1-3என்பது Q1 மட்டும். மூன்று-எழுத்து month names பெரும்பாலான implementations ல் case-insensitive. - Day of week (0–7, 0 மற்றும் 7 இரண்டும் ஞாயிறு). குறிப்பிட்ட weekdays க்கு firing மட்டுப்படுத்துகிறது.
1-5என்பது திங்கள் முதல் வெள்ளி வரை,0,6என்பது weekend,MON-FRIபெரும்பாலான parsers ல் வேலை செய்கிறது. day-of-month மற்றும் day-of-week இரண்டும் குறிப்பிட்ட values க்கு அமைக்கப்படும்போது, classic cron இரண்டில் ஏதேனும் பொருந்தும்போது fire செய்கிறது (logical OR), இது மக்களை ஒவ்வொரு முறையும் ஆச்சரியப்படுத்துகிறது.
Cron expression parser ஏன் பயன்படுத்தவேண்டும்?
- Deploy க்கு முன்பு silent misread கண்டறியுங்கள். Expression `0 2 */3 * *` ஒவ்வொரு மூன்று நிமிடமும் அல்ல — ஒவ்வொரு மூன்றாம் நாளும் காலை 2 மணிக்கு fire ஆகிறது — இங்கே ஒட்டினால் production க்கு ship செய்வதற்கு முன்பு plain English ல் பார்ப்பீர்கள்.
- பெரும்பாலான cloud schedulers default ஆக UTC ல் இயங்குகின்றன. உங்கள் local zone ல் அடுத்த பத்து fire times முன்னோட்டம் பார்ப்பது காலை 3 மணிக்கு யாரையாவது page செய்வதற்கு முன்பு off-by-one-hour DST drift காட்டுகிறது.
- `@daily`, `@weekly` மற்றும் `@monthly` போன்ற shortcuts வசதியானவை ஆனால் தெளிவற்றவை. Parser அடிப்படை ஐந்து-field வடிவத்தை காட்டுகிறது, எனவே சரியாக என்ன schedule ஆனது என்று தெரியும்.
- Field-by-field builder ஒரு நேரத்தில் ஒரு நெடுவரிசையாக schedule உருவாக்க மற்றும் human description நேரடியாக புதுப்பிக்கப்படுவதை பார்க்க அனுமதிக்கிறது, இது cron man page பத்தாவது முறை படிப்பதை விட மிக வேகமானது.
Cron expressions எங்கே பயன்படுத்தப்படுகின்றன?
Cron syntax ஒரு job clock ல் மீண்டும் செய்யப்பட வேண்டும் என்ற எங்கும் தோன்றுகிறது. மூன்று மிகவும் பொதுவான surfaces, ஒவ்வொன்றும் பிரசித்தமான gotcha உடன்:
- Backup schedules. Classic `crontab -e` entry ஒரு database ஐ தினமும் இரவு 2 மணிக்கு S3 க்கு dump செய்கிறது, அல்லது ஒவ்வொரு மாதம் 1ம் தேதி `pg_dump` archive rotate செய்கிறது. `0 2 * * * /usr/local/bin/backup.sh` போன்ற ஒரு வரி வரலாற்றில் வேறு எந்த cron வரியையும் விட அதிகமான Linux servers ல் ship ஆகியிருக்கிறது. நிமிடம் மற்றும் மணியை சரியாக அமைத்து, stderr ஐ durable ஆன இடத்திற்கு redirect செய்தால், ஒரு manual checklist ஐ fire-and-forget script ஆக மாற்றியிருக்கிறீர்கள்.
- GitHub Actions `schedule` triggers. `.github/workflows/*.yml` ல் `on.schedule.cron` key standard five-field cron ஏற்கிறது, ஆனால் job எப்போதும் UTC ல் இயங்குகிறது மற்றும் runner queue busy ஆக இருந்தால் GitHub fire-time ஐ silently skip செய்யும். பொதுவான pattern: `cron: '0 9 * * 1-5'` திங்கள் முதல் வெள்ளி வரை காலை 9 மணி UTC ல் digest அனுப்ப. BST ல் உண்மையில் காலை 10 மணிக்கு வரும் காலை 9 மணி London digest promise செய்யாமல் இங்கே முதலில் உங்கள் local zone ல் preview செய்யுங்கள்.
- AWS EventBridge Scheduler. EventBridge cron expressions ஆண்டிற்கு ஒரு ஆறாவது field எடுக்கின்றன மற்றும் day-of-month அல்லது day-of-week field ல் `*` க்கு பதிலாக `?` தேவைப்படுகிறது — `cron(0 9 ? * MON-FRI *)` என்பது classic weekday 9 AM standard cron இன் EventBridge மொழிபெயர்ப்பு. Scheduled Lambda invocations, ECS task runs மற்றும் Step Function state-machine starts க்கு பயன்படுத்தப்படுகிறது; classic cron syntax உடன் misalignment CloudFormation deploys ல் `ValidationException` errors இன் number-one source.
உண்மையான cron expression எப்படி இருக்கும்?
0 9 * * 1-5 எடுங்கள் — ஒவ்வொரு வாரநாளிலும் காலை 9:00 மணிக்கு fire ஆகிறது. Fields இடதிலிருந்து வலதிற்கு படிக்கவும்: 0 மணியின் zeroth நிமிடம், 9 என்பது 24-மணி நேரக் கடிகையில் காலை 9 மணி, day-of-month ல் * என்பது ஒவ்வொரு calendar day, month ல் * என்பது ஒவ்வொரு மாதம், மற்றும் day-of-week ல் 1-5 firing ஐ திங்கள் முதல் வெள்ளி வரை (1 = standard cron numbering ல் திங்கள்) மட்டுப்படுத்துகிறது. அதை மேலே உள்ள input ல் ஒட்டுங்கள், parser நீங்கள் தேர்வு செய்யும் IANA zone ல் அடுத்த பத்து fire dates render செய்து திங்கள் முதல் வெள்ளி வரை காலை 09:00 மணிக்கு என்று உறுதிசெய்கிறது. AWS EventBridge syntax ல் அதே intent cron(0 9 ? * MON-FRI *) — இறுதியில் year field மற்றும் standard cron * பயன்படுத்தும் இடத்தில் ? கவனிக்கவும். Quartz expression (ஆறு-field, leading seconds உடன்) ஆக அதே intent 0 0 9 ? * MON-FRI. மூன்று வெவ்வேறு platforms, மூன்று வெவ்வேறு surface forms, ஒரே underlying schedule.
Cron expressions ஒரே ஒரு வழியில் மன்னிக்கமாட்டாத: ஒரு typo syntactically valid schedule தருகிறது, அது தவறான நேரத்தில் fire ஆகிறது, code review ல் எந்த error உம் இல்லாமல். `0 0 1 * *` படித்து அது ஜனவரி 1ம் தேதி அல்ல — ஒவ்வொரு மாதத்தின் 1ம் தேதி நள்ளிரவில் இயங்குகிறது என்று தெரிய practice தேவை. மேலே உள்ள parser அந்த practice ஐ பத்து வினாடி sanity check ஆக மாற்றுகிறது — expression ஒட்டவும், English படிக்கவும், உங்கள் local zone ல் அடுத்த பத்து fire times scan செய்யவும், YAML ship செய்யவும் cron வரி commit message சொல்வதை உண்மையில் செய்கிறது என்று தெரிந்துகொண்டு.
5-field மற்றும் 6-field cron க்கு இடையில் என்ன வித்தியாசம்?
ஐந்து-field cron ஒரு-நிமிட resolution உடன் classic Unix grammar. ஆறு-field cron sub-minute scheduling க்கு ஒரு leading seconds நெடுவரிசை சேர்க்கிறது — Quartz மற்றும் Spring இன் @Scheduled பயன்படுத்துகின்றன. AWS EventBridge ஆறு fields பயன்படுத்துகிறது, ஆனால் அதன் கூடுதல் நெடுவரிசை trailing year, seconds அல்ல.
@hourly, @daily மற்றும் @weekly என்ன அர்த்தம்?
1987 இல் அறிமுகப்படுத்தப்பட்ட Vixie-cron nicknames. @hourly = 0 * * * *, @daily = 0 0 * * *, @weekly = 0 0 * * 0, @monthly = 0 0 1 * *, @yearly = 0 0 1 1 *. @reboot boot ல் ஒருமுறை fire ஆகிறது. GitHub Actions மற்றும் EventBridge இந்த aliases நிராகரிக்கின்றன.
Cron ல் ஞாயிறு day 0 ஆ அல்லது day 7 ஆ?
Classic Vixie cron ல் இரண்டும் — 0 மற்றும் 7 ஏற்கப்படுகின்றன, இதனால் 5-7 போன்ற ranges இயற்கையாக வெள்ளி-முதல்-ஞாயிறு ஆக படிக்கின்றன. திங்கள் எப்போதும் 1, சனிக்கிழமை எப்போதும் 6. Quartz மற்றும் AWS EventBridge வேறு மரபு பயன்படுத்துகின்றன: ஞாயிறு 1 உடன் 1-7. அனுமானிப்பதற்கு முன்பு platform docs சரிபார்க்கவும்.
Cron daylight saving time ஐ எவ்வாறு கையாளுகிறது?
இயந்திரத்தின் timezone ஐப் பொறுத்தது. UTC ல் (EventBridge, Kubernetes மற்றும் GitHub Actions ல் default) DST இல்லை. Local DST zone ல், classic Vixie cron spring-forward gap போது jobs skip செய்கிறது மற்றும் fall-back போது இரண்டு முறை இயக்குகிறது; systemd timers சரியாக ஒரு முறை fire ஆகிறது.