Cron on väike kuid võimas programm UNIX‑ja Linux‑sarnastes operatsioonisüsteemides, mis võimaldab käivitada käske või skripte automaatselt kindlatel kellaaegadel või korduvate ajavahemike järel. Seda kasutatakse laialdaselt näiteks Linux masina tööde ajastamiseks, haldustööde automatiseerimiseks ja igapäevaste rutiinide täitmiseks ilma käsitsi sekkumiseta.
Croni saab kasutada enamiku korduvate ülesannete ajastamiseks. Tavapärased kasutusnäited on süsteemi hooldustööde ajastamine, varunduste sooritamine, logifailide puhastamine, failide allalaadimine internetist või e-kirjade regulaarselt kontrollimine ja allalaadimine kindlatel kellaaegadel või kuupäevadel.
Sõna cron on tuletatud kreeka keelest (kellː χρόνος) — vt ka chronos —, mis tähendab aega.
Crontab — cron'i konfiguratsioonifail
Croni tööde loetelu hoitakse failis nimega crontab (cron table). Igal kasutajal võib olla oma crontab ning süstemil on tavaliselt ka süsteemilised crontabid (/etc/crontab, /etc/cron.d/ jt). Kasutaja crontabi redigeerimiseks kasutatakse käsku crontab -e, tööd üles loetlemiseks crontab -l ning eemaldamiseks crontab -r.
Crontabi põhisüntaks
Iga crontab'i rida koosneb viiest ajaväljast ja seejärel käivitatavast käsust:
- minut (0–59)
- tund (0–23)
- päev kuus (1–31)
- kuu (1–12)
- nädalapäev (0–7, kus 0 või 7 = pühapäev)
Pärast neid välju kirjutatakse käsk või skript, mida cron käivitab. Näide:
30 2 * * * /usr/local/bin/backup.sh
Selle ridade järgi käivitab cron skripti /usr/local/bin/backup.sh iga päev kell 02:30.
Võimalused ja süntaksi laiendused
- Loend:
1,15,30— täpsed väärtused. - Vahemik:
1-5— kõik väärtused vahemikus. - Sammud:
*/5minutite puhul iga 5 minuti järel. - Kommenteerimine: read, mis algavad
#, on kommentaarid. - Special strings:
@reboot,@daily,@weekly,@monthly,@hourly,@yearly. Näide:@reboot /usr/local/bin/startup.sh.
Kasutusnäited
- Iga 5 minuti järel:
*/5 * * * * /usr/bin/php /home/user/script.php - Iga päev kell 03:00:
0 3 * * * /usr/local/bin/daily-job.sh >> /var/log/daily-job.log 2>&1 - Iga kuu esimese päeva kell 04:30:
30 4 1 * * /usr/local/bin/monthly-report.sh - Taaskäivitamisel üks kord:
@reboot /usr/local/bin/on-reboot.sh
Praktilised nõuanded ja parimad tavad
- Kasutage käskudes alati täispikki teid (nt
/usr/bin/python3), sest cron'i keskkond sisaldab sageli piiratud PATH'i. - Seadistage vajalikud keskkonnamuutujad crontabi ülaosas (nt
SHELL=/bin/bash,PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin). - Suunake väljundid logifaili (
> /path/to/log 2>&1), vastasel juhul saadetakse viga e‑postiga root‑kasutajale või prügikasti. - Et vältida sama töö paralleelset käivitamist, kasutage lukustamist, näiteks
flockvõi skripti sees kontrolli PID faili abil. - Püüdke mitte ajastada keerulisi või pikaajalisi töid üheaegselt palju masinatel — jaotage koormust või kasutage järjestust.
- Vältige tööde jooksutamist rootina, kui see pole vajalik; andke skriptidele vajalikud õigused ja käivitage sobiva kasutaja crontabist.
Süsteemide ja logimise detailid
Süsteemsed crontabid asuvad tavaliselt kaustades nagu /etc/crontab ja /etc/cron.d/. Croni logisündmusi salvestatakse enamasti süsteemilogidesse (nt /var/log/cron või süsteemi syslog kaudu). Vigade uurimiseks vaadake neid logisid või saatke väljundid käsitsi logi failidesse.
Turvalisus ja alternatiivid
Cron on tõhus, kuid piiratud — kaasaegsetes süsteemides võib olla sobivam kasutada systemd timers, mis pakuvad paremat sõltuvuste haldust ja juhtimist. Croni puhul jälgige failide õigusi, ärge salvestage tundlikke paroole otse crontab'i ja jälgige, millised kasutajad saavad crontabi redigeerida (/etc/cron.allow, /etc/cron.deny).
Kaheaastane kontrollnimekiri kiireks kasutuselevõtuks
- Redigeeri oma crontab:
crontab -e - Kontrolli tööde nimekirja:
crontab -l - Testi käsu käsitsi enne ajastamist
- Kasu: kasuta täielikke teid ja logi väljundid
- Kasuta lukustamist (
flock) ja väldi rooti, kui võimalik
Cron on lihtne, usaldusväärne ja tõhus vahend korduvate ülesannete automatiseerimiseks. Õige seadistuse ja tavadega saab sellega hallata laia valikut töid — alates väikestest skriptidest kuni süsteemitasandi ülesanneteni.