bitlvl
SR

Cron podsetnik

Redosled polja, rasporedi koji ljudima zaista trebaju i tri zamke koje objašnjavaju većinu tiketa „moj cron posao se ne pokreće“.

Staje na jednu uspravnu A4 / Letter stranicu; u prozoru za štampu izaberite „Sačuvaj kao PDF“ da biste zadržali kopiju.

Sintaksa

┌─ minut (0–59)
│ ┌─ sat (0–23)
│ │ ┌─ dan u mesecu (1–31)
│ │ │ ┌─ mesec (1–12, jan–dec)
│ │ │ │ ┌─ dan u nedelji (0–7, sun–sat; 0 i 7 = nedelja)
* * * * *  komanda
*svaka vrednost
5tačno 5
1-5opseg
*/15svaki 15.
1,15lista
8-18/2korak unutar opsega

Specijalni stringovi

@rebootjednom pri podizanju sistema
@hourly0 * * * *
@daily / @midnight0 0 * * *
@weekly0 0 * * 0
@monthly0 0 1 * *
@yearly / @annually0 0 1 1 *

Rasporedi

* * * * *svakog minuta
*/5 * * * *svakih 5 minuta
*/15 9-17 * * 1-5svakih 15 min, radno vreme, radnim danima
0 * * * *svakog sata, na pun sat
30 * * * *svakog sata u :30
0 */6 * * *svakih 6 sati (0, 6, 12, 18)
0 0 * * *dnevno u ponoć
0 3 * * *dnevno u 03:00
30 6 * * 1-5radnim danima u 06:30
0 9,17 * * 1-5radnim danima u 09:00 i 17:00
0 0 * * 0nedeljom u ponoć
0 0 * * 6,0vikendom
0 0 1 * *prvog u mesecu
0 0 1,15 * *1. i 15.
0 0 1 */3 *kvartalno (1. jan, apr, jul, okt)
0 0 1 1 *godišnje
0 0 * * 1#1prvi ponedeljak (nestandardno; koristite 0 0 1-7 * 1)
0 0 1-7 * 1prvi ponedeljak — oprez: okida se 1–7. ILI svakog ponedeljka; dodajte test [ $(date +\%u) = 1 ]
0 0 28-31 * * [ $(date -d tomorrow +\%d) = 01 ] && cmdposlednji dan u mesecu
0 2 * * * sleep $((RANDOM \% 1800)); cmd02:00 sa do 30 min nasumičnog kašnjenja

Zamke

  • PATH je minimalan (/usr/bin:/bin). Koristite apsolutne putanje ili postavite PATH=… na vrhu crontab-a.
  • % znači novi red u komandi; pišite \% (date +\%F).
  • Nema profila školjke: alijasi, nvm, rbenv, venv-ovi se ne učitavaju.
  • Vremenska zona je demonova (obično sistemska, na serverima često UTC). CRON_TZ=Europe/Belgrade radi u cronie-ju.
  • Dan u mesecu I dan u nedelji oba postavljena = pokreće se kad se bilo koji poklopi.
  • Izlaz se šalje mejlom korisniku; preusmerite ga ili postavite MAILTO=.
  • Preklapanje: cron pokreće posao ponovo čak i ako prethodni još radi. Umotajte u flock -n /tmp/job.lock cmd.

Komande

crontab -eizmeni svoj crontab
crontab -lizlistaj
crontab -rukloni sve (bez potvrde!)
crontab -u www-data -lcrontab drugog korisnika (root)
/etc/crontab, /etc/cron.d/*sistemski crontab-ovi: imaju polje korisnika posle rasporeda
/etc/cron.{hourly,daily,weekly,monthly}/drop-in skripte, na desktopima ih pokreće anacron
grep CRON /var/log/syslog; journalctl -u cronvidite šta se pokrenulo

Bezbedan šablon

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[email protected]
SHELL=/bin/bash
# m h dom mon dow  komanda
30 6 * * 1-5  flock -n /run/backup.lock /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

Rezultati i poruke ovog alata prikazuju se na engleskom.

Pitanja

Kako da proverim šta znači cron izraz?

Nalepite ga u cron explainer; on ispisuje raspored rečima i sledećih deset vremena pokretanja u vašoj vremenskoj zoni.