Cron ifodasi nima?
Cron ifodasi vazifa rejalashtiruvchisiga topshiriqni qachon bajarish kerakligini aniq aytadigan ixcham jadval satridir. Format 1975 yilda Unix V7 cron daemoni ichida tugʻilgan va hozirgi kungacha deyarli oʻzgarmagan — xuddi shu beshta maydonli grammatika bugungi kunda Kubernetes CronJobs, AWS EventBridge, GitHub Actions ish oqimlari, Google Cloud Scheduler, GitLab CI, Jenkins quvurlari va har bir Linux distributivida hali ham yetkazib beriladigan crontab ikkilik faylida uchraydi. Grammatika oʻn uch yoki shu atrofidagi belgilarga juda koʻp maʼno joylaydi, shuning uchun uni oddiy inglizchaga oʻgiradigan tahlilchi ishonchli joylashtirish va tong 3 da qaytarish oʻrtasidagi farqdir.
Cron ifodasi qanday ishlaydi?
Standart cron ifodasi birgalikda takrorlanuvchi jadvalni belgilaydigan beshta boʻsh joy bilan ajratilgan maydondan iborat. Dvigatel har daqiqada joriy vaqtni ifoda bilan solishtiradi va barcha beshta maydon mos kelganda topshiriqni bajaradi. Maydonlar, chapdan oʻngga:
- Daqiqa (0–59). Topshiriq soat ichida qaysi daqiqada bajariladi.
0soat boshida,30yarim soatda,*/5har besh daqiqada (00, 05, 10, ...),15,45esa chorak oʻtganda va chorak qolganda degani. - Soat (0–23). 24 soatlik soatda kunning qaysi soati.
0yarim tun,9ertalab 9 soat,17kechqurun 5 soat. Diapasonlar (9-17ish vaqti uchun) va qadam qiymatlari (*/2har ikki soatda) daqiqalar uchun xuddi shunday ishlaydi. - Oy kuni (1–31). Qaysi taqvim kunida ishlash kerak.
1oyning 1-kunini,*har kunni,1,151-va 15-kunlarni anglatadi.31bilan ehtiyot boʻling — 31 kuni boʻlmagan oylarni jimgina oʻtkazib yuboradi. - Oy (1–12 yoki JAN–DEC). Qaysi oylarda ishlash kerak.
*har oyni,1,7yanvar va iyulni,1-3faqat birinchi chorakni anglatadi. Uch harfli oy nomlari koʻpchilik amalga oshirishlarda katta-kichik harfga sezgir emas. - Hafta kuni (0–7, bu yerda 0 ham 7 ham yakshanba). Bajarilishni muayyan hafta kunlariga cheklaydi.
1-5dushanbadan jumagacha,0,6dam olish kunlari,MON-FRIkoʻpchilik tahlilchilarda ishlaydi. Oy kuni ham hafta kuni ham muayyan qiymatlarga oʻrnatilganda, klassik cron ikkalasidan birida mos kelsa ishga tushadi (mantiqiy YOKI), bu har safar odamlarni hayron qoldiradi.
Cron ifodasi tahlilchisidan nima uchun foydalanish kerak?
- Joylashtirmasdan oldin jimgina notoʻgʻri oʻqishni ushlab qoling. `0 2 */3 * *` ifodasi har uch daqiqada emas, har uchinchi kuni ertalab soat 2 da bajariladi — uni shu yerga joylashtiring va ishga tushirishdan oldin oddiy inglizchada koʻrasiz.
- Koʻpchilik bulut rejalagichlari sukut boʻyicha UTC da ishlaydi. Navbatdagi oʻnta ishga tushirish vaqtini mahalliy vaqt mintaqangizda oldindan koʻrish, kimnidir tong 3 da chaqirishdan oldin bir soatlik DST siljishini aniqlaydi.
- `@daily`, `@weekly` va `@monthly` kabi qisqartmalar qulay, ammo noaniq. Tahlilchi sizga asosiy beshta maydonli shaklni koʻrsatadi, shuning uchun nima rejalashtirilganini aniq bilasiz.
- Maydon-maydon yaratuvchi bir vaqtning oʻzida jadval tavsifini jonli ravishda yangilab turganida jadvalni bir ustun boshlab yasashga imkon beradi, bu esa cron man sahifasini oʻninchi marta qayta oʻqishdan ancha tezroq.
Cron ifodalari qayerlarda qoʻllaniladi?
Cron sintaksisi soat boʻyicha takrorlanishi kerak boʻlgan istalgan joyda uchraydi. Eng keng tarqalgan uchta yuz, har birining mashhur tuzoqchasi bilan:
- Zaxira jadvallari. Klassik `crontab -e` yozuvi har kecha soat 2 da maʼlumotlar bazasini S3 ga yuklaydi yoki har oyning 1-kuni `pg_dump` arxivini aylantiradi. `0 2 * * * /usr/local/bin/backup.sh` kabi satr tarixdagi har qanday cron satriga qaraganda koʻproq Linux serverlarida joylashtirilgan. Daqiqa va soatni toʻgʻri kiriting, stderr ni doimiy joyga yoʻnaltiring va qoʻlda tekshirish roʻyxatini avtomatik skript bilan almashtirdingiz.
- GitHub Actions `schedule` triggerlari. `.github/workflows/*.yml` dagi `on.schedule.cron` kaliti standart beshta maydonli cron qabul qiladi, ammo ish doimo UTC da ishlaydi va GitHub ishga tushirish vaqtini runner navbati band boʻlsa jimgina oʻtkazib yuboradi. Keng tarqalgan pattern: `cron: '0 9 * * 1-5'` dushanbadan jumagacha soat 9 UTC da digest yuborish uchun. Londonga soat 9 dagi digest vaʼdasi BST da soat 10 da yetib kelmasligi uchun mahalliy vaqt mintaqangizda oldindan koʻring.
- AWS EventBridge Scheduler. EventBridge cron ifodalari yil uchun oltinchi maydon oladi va oy kuni yoki hafta kuni maydonlaridan birida `*` oʻrniga `?` talab qiladi — `cron(0 9 ? * MON-FRI *)` klassik ish kunlari soat 9 dagi EventBridge tarjimasi. Rejalashtirilgan Lambda chaqiruvlari, ECS vazifa ishlari va Step Function avtomat mashinalarini ishga tushirish uchun ishlatiladi; klassik cron sintaksisi bilan toʻgʻri kelmasligi CloudFormation joylashtiruvlaridagi `ValidationException` xatolarining asosiy manbai.
Haqiqiy cron ifodalovchi qanday koʻrinadi?
0 9 * * 1-5 ni oling — har ish kunida soat 9:00 da bajariladi. Maydonlarni chapdan oʻngga oʻqib: 0 soatning nol daqiqasi, 9 24 soatlik soatda ertalab 9, oy kuni boʻyicha * har taqvim kunini, oy boʻyicha * har oyni, hafta kuni boʻyicha 1-5 esa bajarilishni dushanbadan jumagacha cheklaydi (standart cron raqamlashuvida 1 = dushanba). Buni yuqoridagi kirish maydoniga joylashtiring va tahlilchi tanlagan IANA vaqt mintaqangizda navbatdagi oʻnta sanalar bilan Dushanba - Juma, soat 09:00 da tasdiqlaydi. AWS EventBridge sintaksisidagi xuddi shu niyat cron(0 9 ? * MON-FRI *) — oxiridagi yil maydoni va standart cron `*` ishlatadigan joyda `?` ga diqqat qiling. Quartz ifodalovchi sifatida (yetakchi sekundlar bilan olti maydonli) 0 0 9 ? * MON-FRI. Uchta platform, uchta turli shakl, bitta asosiy jadval.
Cron ifodalari aynan bir usulda ogʻir: xato yozuv kodda tekshirib boʻlmaydigan, notoʻgʻri vaqtda bajariluvchi sintaktik jihatdan toʻgʻri jadvalni beradi. `0 0 1 * *` ni oʻqib, u har oyning yanvar 1-sida emas, har oyning 1-sida yarim tunda ishlashini bilish mashqni talab qiladi. Yuqoridagi tahlilchi bu mashqni oʻn soniyalik tekshirishga aylantiradi — ifodasini joylashtiring, inglizchani oʻqing, mahalliy vaqt mintaqangizda navbatdagi oʻnta ishga tushirish vaqtini skanerlang va cron satri commit xabari aytganidek bajarishini bilib YAML faylini joylashtiring.
5 maydonli va 6 maydonli cron oʻrtasidagi farq nima?
Besh maydonli cron bir daqiqalik aniqlikka ega klassik Unix grammatikasi. Olti maydonli cron daqiqadan kam jadvallash uchun yetakchi sekund ustunini qoʻshadi — Quartz va Springʻning @Scheduled tomonidan ishlatiladi. AWS EventBridge ham olti maydon ishlatadi, ammo uning qoʻshimcha ustuni yetakchi sekund emas, keyingi yil.
@hourly, @daily va @weekly nima degan maʼnoni anglatadi?
1987 yilda taqdim etilgan Vixie-cron laqablari. @hourly = 0 * * * *, @daily = 0 0 * * *, @weekly = 0 0 * * 0, @monthly = 0 0 1 * *, @yearly = 0 0 1 1 *. @reboot yuklashda bir marta bajariladi. GitHub Actions va EventBridge bu laqablarni qabul qilmaydi.
Cron da yakshanba 0 kunmi yoki 7 kunmi?
Ikkisi ham, klassik Vixie cron da — 0 va 7 qabul qilinadi, shuning uchun 5-7 kabi diapasonlar juma-yakshanbagacha tabiiy oʻqiladi. Dushanba doim 1, shanba doim 6. Quartz va AWS EventBridge boshqa konventsiyadan foydalanadi: yakshanbasi 1 boʻlgan 1-7. Taxmin qilishdan oldin platform hujjatlarini tekshiring.
Cron yoz vaqtini (DST) qanday boshqaradi?
Dvigatelning vaqt mintaqasiga bogʻliq. UTC da (EventBridge, Kubernetes va GitHub Actions da sukut boʻyicha) DST mavjud emas. Mahalliy DST mintaqasida klassik Vixie cron bahorgi oldinga siljish oraligʻida topshiriqlarni oʻtkazib yuboradi va kuzgi orqaga qaytishda ikki marta bajaradi; systemd taymerlar esa aniq bir marta bajariladi.