Cron je računalniški program, s katerim lahko računalniku omogočite, da opravi naloge v določenih časovnih intervalih. Uporablja se v računalniških operacijskih sistemih UNIX in operacijskih sistemih, ki so podobni sistemu UNIX, kot je Linux.

Cron lahko uporabite za načrtovanje večine ponavljajočih se opravil. Pogosto se uporablja za avtomatizacijo opravil, povezanih z vzdrževanjem ali upravljanjem računalnika ali računalniškega omrežja, čeprav se lahko uporablja tudi za številna druga opravila, kot sta prenašanje datotek iz interneta in prenašanje e-pošte ob določenih urah ali datumih.

Ime računalniškega programa cron izhaja iz besede cron, ki izhaja iz grške besede za čas, χρόνος (chronos).

Cron nastavite z urejanjem datoteke, imenovane crontab (tabela cron). V tej datoteki so navedena določena opravila, ki jih mora računalnik zagnati, in čas, ko jih je treba zagnati.

Kje so crontab datoteke in kako jih upravljamo

Običajno ima vsak uporabnik svojo crontab datoteko. Najpogostejši ukazi za upravljanje so:

  • crontab -e — odpre crontab trenutnega uporabnika za urejanje.
  • crontab -l — izpiše trenutni crontab uporabnika.
  • crontab -r — odstrani crontab uporabnika.

Namesto uporabnikovega crontaba obstajajo tudi sistemske lokacije:

  • /etc/crontab — sistemski crontab (ima dodatno polje z uporabnikom, pod katerim teče ukaz).
  • /etc/cron.d/ — direktorij za pakete, ki potrebujejo svoje crontab datoteke.
  • /etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/, /etc/cron.monthly/ — enostaven način za skripte, ki naj tečejo na teh intervalih.

Oblika vnosa v crontab

Osnovna vrstica v crontab datoteki ima obliko (pet časovnih polj, nato ukaz):

minuta ura dan-v-mesecu mesec dan-v-tednu ukaz

Polja:

  • minuta — 0–59
  • ura — 0–23
  • dan-v-mesecu — 1–31
  • mesec — 1–12
  • dan-v-tednu — 0–7 (0 in 7 pomenita nedelja) ali imena dni

Primeri zapisov:

 # Vsako jutro ob 6:30 zaženi varnostno kopijo 30 6 * * * /usr/local/bin/backup.sh  # Vsakih 5 minut */5 * * * * /usr/bin/php /var/www/html/script.php  # Vsako nedeljo ob 3:00 0 3 * * 0 /usr/bin/apt update && /usr/bin/apt -y upgrade 

Namesto natančnih polj lahko uporabite tudi posebne fraze:

  • @reboot — ob zagonu sistema
  • @yearly ali @annually — enkrat letno
  • @monthly, @weekly, @daily, @hourly

Dodatne nastavitve in nasveti

Crontab podpira tudi nastavitve okolja na vrhu datoteke, na primer:

 SHELL=/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin [email protected] HOME=/home/username 
  • Uporabljajte absolutne poti za ukaze in datoteke, ker ima cron omejeno okolje (PATH je pogosto zelo skromno nastavljen).
  • Preusmerjanje izhoda: ker cron pošlje izhod na e-pošto (če je MAILTO nastavljen), je dobro preusmeriti izhod v log: /path/script.sh >> /var/log/script.log 2>&1.
  • Če v ukazu uporabite znake %, jih morate v crontabu pobegniti z \%, ker se jih šteje za poseben znak (preoblikovanje vrstice v stdin).
  • Če skripta uporablja relativne poti ali zahteva določeno delovno mapo, nastavite cd /pot/do/mape && ./skripta ali v skripti začnite z cd.

Varnost, dovoljenja in odpravljanje težav

  • Določeni sistemi uporabljajo /etc/cron.allow in /etc/cron.deny za nadzor, kateri uporabniki smejo urejati crontab.
  • Preverite sistemske log datoteke (npr. /var/log/cron, /var/log/syslog ali ), če opravila ne tečejo kot pričakovano.
  • Za lažje razhroščevanje začasno preusmerite okolje v datoteko (v crontab dodajte vrstico): * * * * * env >> /tmp/cron_env 2>&1 in si oglejte, katera spremenljivka PATH je na voljo.
  • Uporabite popolne poti do izvajalnikov (npr. /usr/bin/python3), ker ukazi, ki delujejo v interaktivni seji, morda ne delujejo pod cron.

Napredne možnosti

  • V sistemskem crontabu (/etc/crontab) je dodatno polje za uporabnika, npr.: 0 2 * * * root /usr/local/bin/sys-maintenance.
  • V /etc/cron.d/ lahko nameščate paketne skripte z ločenimi datotekami.
  • Za bolj natančno kontrolo nad časovnim načrtovanjem (in večjo preglednost/poročanje) lahko namesto crona uporabite systemd timers, ki so v novejših distribucijah alternativa cron-u.

Pogoste napake

  • Neupoštevanje okolja (PATH, HOME) — ukaz ne najde izvršljive datoteke.
  • Uporaba relativnih poti — skripta ne najde datotek.
  • Neustrezne pravice — skripta nima execute pravic ali uporabnik nima dostopa do datotek.
  • Časovna cona in poletni čas — cron uporablja sistemsko časovno cono; pri selitvah med časovnimi conami ali ob vklopu/izklopu poletnega časa se čas zagona lahko spremeni.

Cron je preprost, zanesljiv in še vedno široko uporabljen mehanizem za razporejanje opravil v UNIX/Linux okolju. Čeprav obstajajo naprednejše alternative (kot so systemd timers ali specializirana orodja za orkestracijo), je za številne rutinske naloge cron še vedno najbolj praktična izbira.