Cron job je načrtovano opravilo, ki ga storitev cron v Linuxu samodejno zažene ob določenih časih, na primer za izdelavo varnostne kopije, zagon vzdrževalne skripte ali načrtovana opravila spletne aplikacije. Seznam opravil se imenuje crontab.
Urejanje crontab
Načrtovana opravila svojega uporabnika urejaš z naslednjim ukazom:
crontab -e
Seznam že nastavljenih opravil:
crontab -l
Kot uporabnik root lahko urejaš tudi crontab drugega uporabnika: crontab -u felhasznalo -e. Pazi na ukaz crontab -r: brez vprašanja izbriše vsa tvoja opravila (r je na tipkovnici ob e). V AlmaLinux 10 je bila v preizkusu varnostna kopija izbrisanega crontab shranjena v datoteko ~/.cache/crontab/crontab.bak, od koder jo obnoviš z ukazom crontab ~/.cache/crontab/crontab.bak; v drugih sistemih takšna kopija morda ne nastane. Če uporabljaš gostovanje cPanel, lahko opravila dodaš tudi v vmesniku, glej: Ustvarjanje opravila cron v cPanelu.
Sintaksa crontab
Vsaka vrstica je sestavljena iz petih časovnih polj in ukaza, ki ga je treba zagnati:
* * * * * ukaz
│ │ │ │ │
│ │ │ │ └── dan v tednu (0–7, tako 0 kot 7 sta nedelja)
│ │ │ └──── mesec (1–12)
│ │ └────── dan v mesecu (1–31)
│ └──────── ura (0–23)
└────────── minuta (0–59)
V poljih lahko uporabiš naslednje oznake:
*: vse vrednosti;,: naštevanje, na primer1,15(1. in 15. dan v mesecu);-: obseg, na primer1-5(od ponedeljka do petka);/: korak, na primer*/15(vsakih 15 minut).
Praktični primeri
0 3 * * *: vsak dan ob 3. uri zjutraj*/15 * * * *: vsakih 15 minut0 0 1 * *: prvi dan vsakega meseca ob polnoči0 9 * * 1: vsak ponedeljek ob 9. uri30 8-18 * * 1-5: ob delavnikih med 8. in 18. uro, ob 30. minuti vsake ure
Celoten vnos:
0 3 * * * /usr/bin/php /home/felhasznalo/mentes.php >> /home/felhasznalo/mentes.log 2>&1
Ta vsak dan ob 3. uri zjutraj zažene skripto PHP in njen izpis skupaj s sporočili o napakah zapiše na konec dnevniške datoteke.
Namesto petih polj lahko uporabiš tudi okrajšave: @reboot (ob zagonu sistema), @hourly, @daily, @weekly, @monthly.
Sistemski crontab
Poleg uporabniškega crontab na lastnem strežniku opravila vsebujeta tudi datoteka /etc/crontab in imenik /etc/cron.d/. V njih je za časovnimi polji še šesto polje: uporabnik, v imenu katerega teče ukaz, na primer 0 4 * * * root /usr/local/bin/takaritas.sh.
Če se opravilo cron ne izvede
Najpogostejši vzrok je, da ukaz ročno deluje, iz crona pa ne. Vzroki za to:
- Poti: cron teče z minimalnim okoljem,
PATHvsebuje le nekaj imenikov (v AlmaLinux 10 v preizkusu/usr/bin:/bin:/usr/sbin:/sbin, torej/usr/local/binin lastnega imenika~/binni v njem). Vedno navedi celotno pot (/usr/bin/php, nephp). Natančno mesto pokaže ukazwhich php. - Znak
%: v crontab%pomeni prelom vrstice, zato ga je treba na primer v ukazudate +%Fzapisati kot\%. V preizkusu je cron iz vrsticedate +%F > /tmp/kimenet.txtzagnal le deldate +(v dnevniku:CMDEND (date +)), datoteka sploh ni nastala; v oblikidate +\%Fse je izvedel pravilno. - Dovoljenja: skripta mora biti izvršljiva (
chmod +x szkript.sh), glej članek o dovoljenjih datotek. - Časovni pas: cron teče po časovnem pasu strežnika. Preveri ga z ukazom
timedatectl.
Zagone beleži sistemski dnevnik: v AlmaLinux in Rocky Linux jih najdeš v datoteki /var/log/cron, v Debianu in Ubuntuju z ukazom journalctl -u cron oziroma, če je nameščen rsyslog, v datoteki /var/log/syslog. Izpis opravila je dobro preusmeriti v datoteko, kot kaže zgornji primer, tako lahko ob napaki ugotoviš, kaj se je zgodilo.
Pri straneh WordPress je bolje namesto vgrajenega WP-Cron uporabiti pravo opravilo cron, o tem preberi v našem članku o zamenjavi crona WordPress.