Bosh sahifa Wiki Cron

Cron

CronUnix 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:

  • PATH qisqa;
  • current directory noma’lum;
  • shell /bin/sh;
  • profile yuklanmaydi;
  • terminal yo‘q.

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:

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:

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:

bilan ishlaydi.

World-writable script root cron orqali bajarilsa, privilege escalation yuz beradi.

Diagnostika

Cron job ishlamasa:

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