Cron — Unix va Linux tizimlarda buyruq yoki scriptlarni belgilangan vaqt jadvali bo‘yicha avtomatik ishga tushiradigan xizmat.
Cron daemon vaqtni kuzatadi va crontab yozuvlariga mos kelgan vazifalarni bajaradi.
U backup, hisobot, log tozalash, sinxronizatsiya va davriy maintenance uchun ishlatiladi.
Crontab
Crontab foydalanuvchi yoki tizim cron vazifalari ro‘yxati.
Oddiy yozuv beshta vaqt maydoni va commanddan iborat:
minute hour day-of-month month day-of-week command
Misol:
30 2 * * * /usr/local/bin/backup.sh
Har kuni 02:30da ishga tushadi.
Maydonlar
| Maydon | Odatdagi diapazon |
|---|---|
| Daqiqa | 0–59 |
| Soat | 0–23 |
| Oy kuni | 1–31 |
| Oy | 1–12 |
| Hafta kuni | 0–7 |
| Command | Shell buyrug‘i |
Hafta kuni 0 va 7 yakshanbani bildirishi mumkin.
Operatorlar
Yulduzcha
Har qiymat:
* * * * *
har daqiqada.
Ro‘yxat
0 9 * * 1,3,5
dushanba, chorshanba va juma 09:00.
Oraliq
0 8-18 * * *
08:00dan 18:00gacha har soat.
Qadam
*/15 * * * *
har 15 daqiqada.
Day-of-month va day-of-week
Ko‘p cron implementatsiyalarida oy kuni va hafta kuni ikkalasi cheklangan bo‘lsa, ulardan bittasi mos kelishi yetarli bo‘lishi mumkin.
Bu kutilmagan qo‘shimcha ishga tushishga sabab bo‘ladi.
Aniq semantika implementatsiya hujjatidan tekshiriladi.
Maxsus yozuvlar
Ba’zi cronlar:
@reboot;@hourly;@daily;@weekly;@monthly;@yearly
kabi shortcutlarni qo‘llaydi.
@reboot cron daemon ishga tushganda bajariladi, fizik rebootning o‘ziga qat’iy bog‘lanmasligi mumkin.
User crontab
Foydalanuvchi crontabidagi command shu user huquqida ishlaydi.
Muhit interaktiv shellga qaraganda cheklangan.
Ko‘pincha:
Script absolute pathlardan foydalanadi.
System crontab
/etc/crontab va /etc/cron.d/ fayllarida vaqt maydonidan keyin user nomi bo‘lishi mumkin.
Misol:
0 3 * * * backup /usr/local/bin/run-backup
User crontab formatiga user ustunini qo‘shish xato.
Environment
Crontab boshida environment variable berilishi mumkin:
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
[email protected]
Secretni crontabda ochiq saqlash permission va audit talab qiladi.
Output
Cron command stdout va stderr chiqarsa, tarixan local mail orqali userga yuborilishi mumkin.
Mail tizimi bo‘lmasa output yo‘qolishi yoki logda ko‘rinmasligi mumkin.
Yaxshi script:
- structured log;
- exit code;
- monitoring;
- alert
beradi.
Redirect
Output faylga yozilishi mumkin:
0 2 * * * /path/job >> /var/log/job.log 2>&1
Log rotation bo‘lmasa fayl cheksiz o‘sadi.
Foiz belgisi
Ayrim cron implementatsiyalarida commanddagi % maxsus talqin qilinadi va newline yoki stdin bo‘lishi mumkin.
Date formatidagi % escape qilinmasa command buziladi.
Bu cron syntaxining muhim farqlaridan biri.
Overlap
Vazifa oldingi ish tugamasdan yana boshlanishi mumkin.
Masalan, har 5 daqiqalik job 12 daqiqa ishlaydi.
Yechimlar:
- file lock;
flock;- database advisory lock;
- distributed lock;
- single-instance scheduler;
- job ichida idempotency.
Lock file
Oddiy lock file yaratish race conditionga ega bo‘lishi mumkin.
Atomic file creation yoki flock ishlatiladi.
Process crashidan keyin stale lockni qanday tiklash aniq belgilanadi.
Timezone
Cron host timezone’iga tayanadi.
Daylight Saving Time mavjud hududda:
- ayrim vaqt takrorlanadi;
- ayrim vaqt umuman bo‘lmaydi.
UTC ishlatish yoki schedulerning timezone funksiyasi bilan aniq siyosat belgilanadi.
Anacron
Kompyuter belgilangan vaqtda o‘chiq bo‘lsa, oddiy cron o‘tkazib yuborilgan vazifani keyin avtomatik bajarmasligi mumkin.
Anacron kunlik yoki uzoq davriy vazifalarni tizim qayta yoqilganda bajarishga yordam beradi.
U aniq daqiqali schedule uchun emas.
Cron va systemd timer
Systemd timer:
bilan yaxshi integratsiyalangan.
Cron sodda va portable.
Xavfsizlik
Cron script:
- absolute path;
- cheklangan permission;
- ishonchli working directory;
- input validation;
- minimal user;
- lock;
- secret protection
bilan ishlaydi.
World-writable script root cron orqali bajarilsa, privilege escalation yuz beradi.
Diagnostika
Cron job ishlamasa:
- daemon holati;
- crontab syntax;
- user;
- PATH;
- permission;
- executable bit;
- shell;
- timezone;
- output;
- environment;
- SELinux;
- lock
tekshiriladi.
Command terminalda ishlashi cron muhitida ham ishlashini kafolatlamaydi.
Idempotent cron vazifa
Cron job bir xil vaqt oralig‘i uchun qayta ishga tushirilganda ma’lumotni ikki marta buzmasligi kerak.
Masalan, kunlik hisobot:
- sana bo‘yicha unique identifikator;
- upsert;
- transaction;
- oldingi holatni tekshirish;
- atomik fayl nomi
ishlatadi.
Bu server reboot, manual retry yoki scheduler xatosida duplicate natijani kamaytiradi.
Exit code va ogohlantirish
Cron daemon commandni ishga tushirgani vazifa muvaffaqiyatli bo‘lganini anglatmaydi. Script har xatoda non-zero exit code qaytaradi.
Monitoring quyidagilarni saqlaydi:
- boshlanish va tugash vaqti;
- exit code;
- davomiylik;
- oxirgi muvaffaqiyat;
- keyingi schedule;
- log havolasi.
“Oxirgi muvaffaqiyat” muddati oshsa alert yuboriladi.
Distributed muhit
Bir xil crontab bir nechta serverda o‘rnatilsa, job har node’da ishga tushadi. Faqat bitta instance kerak bo‘lsa leader election, distributed lock yoki markaziy scheduler ishlatiladi.
Ish vaqti cheklovi
Uzoq ishlaydigan cron vazifaga timeout qo‘yiladi. Timeout tugaganda child processlar ham tartibli yopilishi nazorat qilinadi, aks holda orphan workerlar qolishi mumkin.
Bog‘liq tushunchalar
Scheduler, Crontab, Cron daemon, Systemd timer, Anacron, Shell, Environment variable, File lock, Backup